Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Вставка элемента в место вызова функции (https://javascript.ru/forum/dom-window/19392-vstavka-ehlementa-v-mesto-vyzova-funkcii.html)

belkir 03.08.2011 02:02

Вставка элемента в место вызова функции
 
Всем привет! Возникла проблема:
надо вставить элемент в место вызова функции... трабл заключается в том что он создаётся функцией var my_elem = document.createElement();
т.е. необходимо получить объектную ссылку на созданный элемент.

document.write(); не подходит так, как с него нельзя получить объектную ссылку, а создавать элемент с id нельзя по определению задачи.

Посоветуйте как я могу вставить элемент в место вызова функции и при этом получить на вставляемый элемент объектную ссылку?

Заранее спасибо!

pashak 03.08.2011 02:41

(function init(){
 var d=document.getElementsByTagName("div");
 d[d.length-1];//ваш элемент, если, конечно, он был вставлен последним в документе
 })();


Но если честно, я так и не понял, в чем проблема. Опишите подробнее.

belkir 03.08.2011 03:04

1) создаю элемент
2) его надо вставить в место вызова функции
3) после на него надо получить объектную ссылку, но без использования id

Kolyaj 03.08.2011 10:33

Цитата:

Сообщение от belkir
3) после на него надо получить объектную ссылку, но без использования id

У вас уже есть ссылка на него.

belkir 03.08.2011 10:40

какая?
я же не могу сделать так:
1) document.createElement();
2) вставить его в место вызова
????

Sweet 03.08.2011 11:07

var my_elem = document.createElement();//my_elem - вот вам и ссылка

belkir 03.08.2011 11:17

ага, это я знаю. А вот как теперь его отрисовать в место вызова функции?

Kolyaj 03.08.2011 11:19

Что такое место вызова функции?

belkir 03.08.2011 11:24

<span><script>place_here(tag);</script></span>

function place_here(tag)
{
var my_elem = document.createElement(tag);
>>что сюда для отрисовки в место вызова функции?
}

Kolyaj 03.08.2011 11:30

Самое оптимальное использовать document.write.

belkir 03.08.2011 11:38

я тоже так думал но написав:

var my_elem = document.createElement(tag);
document.write(my_elem);

я, разумеется, получил ошибку

Kolyaj 03.08.2011 11:59

Вам действительно нужно создавать элемент через document.createElement?

belkir 03.08.2011 12:00

нет, мне нужно создать элемент и привязаться к нему без использования id, желательно по объектной ссылке

Kolyaj 03.08.2011 12:11

Это какое-то искусственное ограничение чтоли?

belkir 03.08.2011 12:16

это такой принцип работы. Способ есть?

Kolyaj 03.08.2011 12:21

Способ зависит от того, почему нельзя использовать id.

belkir 03.08.2011 12:24

потому что нет способа к нему привязаться. оно не должно использоваться по заданию.

я прошу определённой помощи, а именно:
1) создать элемент
2) вставить его в место вызова функции
3) привязаться к нему объектной ссылкой, без использования ИД

Kolyaj 03.08.2011 12:32

Цитата:

Сообщение от belkir
оно не должно использоваться по заданию.

Т.е. ограничение всё-таки искусственное.

<script type="text/javascript">
function placeHere(tag) {
    var el = document.createElement(tag);
    el.innerHTML = tag;
    var spans = document.getElementsByTagName('span');
    spans[spans.length - 1].appendChild(el);
}
</script>
--&gt;<span><script type="text/javascript">placeHere('b');</script></span>&lt;--


Это не будет работать, если в элементе span есть ещё что-то. Нормальный работающий пример можно придумать, только зная все условия задачи и предпосылки для этих условий.

belkir 03.08.2011 22:55

Решение додумал сам: Оптимально и практично:

function plaseHere('text')
{
  document.write('<div></div>');
  var elem = document.getElementsByTagName('div');
  elem = elem[elem.length - 1];
  elem.innerHTML = text;
  return true;
}


При этом имеем вставленное в нужное место содержание + объектную ссылку на элемент без использования идентификатора, которую можно привязать к чему - либо. В моём случае к родителю.

nikita.mmf 04.08.2011 13:27

function placeHere( tagName, text ) {
	var node = document.createElement( tagName );
	node.appendChild( document.createTextNode( text + "" ) );
	var scripts = document.getElementsByTagName("script"), 
		lastScript = scripts[ scripts.length - 1 ];
	if ( lastScript.parentNode ) {
		lastScript.parentNode.insertBefore ( node, lastScript );
	}
	node = scripts = lastScript = null;
}

<span><script type="text/javascript">placeHere("strong", "вставлен 'strong'")</script></span>

Slavenin 04.08.2011 21:39

а как же всемогущий объект event?
вызов функции в нужном элементе по нужному событию, сам вызов
app(event)

function app(e)
{
  //получаем ссылку на вызвавший элемент с учетом ИЕ
  var elem = '';
  if('target' in e)
  {
     elem = e.target
  }
  else
  {
    elem = e.srcElement
  }
  //добавляем внутрь любой текст
  elem.innerHTML = 'text';
  //или же можно создать вызвавшему елементу потомка
  var ch = document.createElement('div');
  elem.appendChild(ch);
  //и уже ему добавить текст внутрь
  ch.innerHTML = 'text';
}

Kolyaj 05.08.2011 08:59

Slavenin,
вы о чём вообще?


Часовой пояс GMT +3, время: 13:00.