Вставить родственный узел в JS - PullRequest
23 голосов
/ 07 января 2012

Итак, у меня есть div с некоторыми предварительными тегами, например:

<code><div id="editor" >
    <pre contentEditable="true">1
2 3

Теперь я хочу использовать Javascript, чтобы поместить новый узел pre между 1 и 2. Я пытался сделать это таким образом (поскольку я понимаю, что DOM - это двусвязное дерево), но я получаюОщущение, что, возможно, указатели не доступны для редактирования, поскольку я подхожу к нему.

(просто фрагмент внутри обработчика события, e - событие)

var tag = e.srcElement;
    if(tag.nextSibling){
        var next = tag.nextSibling;
        var newPre = document.createElement('pre');
        newPre.setAttribute("contentEditable", "true");
        newPre.innerHTML = "boom";
        tag.nextSibling = newPre;
        newPre.nextSibling = next;
    }

Эти последние две строки взяты из моего опыта в c ++, но в JS я чувствую себя неприлично.Как бы я установить новый узел родного брата?

Ответы [ 2 ]

46 голосов
/ 07 января 2012

Вот как я бы это сделал:

JS

var container = document.getElementById('editor'),
    firstChild = container.childNodes[1];
if (container && firstChild) {
    var newPre = document.createElement('pre');
    newPre.setAttribute("contentEditable", "true");
    newPre.innerHTML = "boom";  
    firstChild.parentNode.insertBefore(newPre, firstChild.nextSibling);    
}

jsfiddle: http://jsfiddle.net/bZGEZ/

24 голосов
/ 19 апреля 2017

Вы также можете вставить новый брат, используя insertAdjacentElement или insertAdjacentHTML ;оба варианта принимают параметры beforebegin, beforeend, afterbegin и afterend.

Пример:

var container = document.getElementById('editor'),
firstChild = container.childNodes[1];

var newPre = document.createElement('pre');
newPre.setAttribute("contentEditable", "true");
newPre.innerHTML = "boom";  
firstChild.insertAdjacentElement("afterend", newPre);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...