Есть ли альтернатива функции jQuery .after () - PullRequest
3 голосов
/ 14 марта 2011

Я пытаюсь преобразовать свой скрипт jQuery в javascript.У меня есть проблема ..

У меня есть скрипт, который создает узел

var new_node = document.createElement("div");
      new_node.className="tooltip";
      new_node.innerHTML = html;
      alert(new_node.className);

Когда я делаю это

jQuery(link).after(new_node);

Он работает нормально.Но я хочу сделать это способом javascript.Я пытался использовать функцию appendChild, но она дает странные результаты.

Пожалуйста, помогите мне с этим.

Ответы [ 3 ]

10 голосов
/ 14 марта 2011

Вы сравниваете jQuery after с appendChild, но они делают совершенно разные вещи. after помещает элемент после эталонного элемента, appendChild помещает его в его.

Вы, вероятно, хотите insertBefore (с опорным узлом link '* nextSibling).

Итак:

var link = /* ... get the `a` element from somewhere ... */;
var new_node = document.createElement("div");
new_node.className="tooltip";
new_node.innerHTML = html;
link.parentNode.insertBefore(new_node, link.nextSibling);

Если link - последнее, что есть у его родителя, это нормально; * * Будет тысяча двадцать-два быть * +1023 * и insertBefore принимает null в качестве опорного узла (это означает «включить в конце»).

0 голосов
/ 14 марта 2011

Предполагая, что у вас уже есть экземпляр, созданный как link, вы можете сделать то, что вы хотите, таким образом, в простом Javascript:

link.parentNode.appendChild(new_node);

Узел link должен быть последним узлом в егоконтейнер.В противном случае вам нужно будет найти link nextSibling и использовать insertBefore, чтобы поставить new_node на свое место.

0 голосов
/ 14 марта 2011
jQuery(link).append(new_node);
...