Что эквивалентно функции jQuery .before() в Javascript?

Что эквивалентно .before() в Javascript?


person Akos    schedule 14.03.2014    source источник
comment
В простейшей форме a.before(b) равно a.parentNode.insertBefore(b,a).   -  person Niet the Dark Absol    schedule 14.03.2014
comment
MDN: Node.insertBefore(newElement, referenceElement)   -  person t.niese    schedule 14.03.2014
comment
Вы всегда можете просмотреть источник   -  person Jason P    schedule 14.03.2014
comment
Я полагаю, вы имеете в виду .insertbefore()   -  person rolory    schedule 14.03.2014
comment
@NiettheDarkAbsol, вы должны опубликовать это как ответ.   -  person Rory McCrossan    schedule 14.03.2014
comment
github.com/jquery/jquery/blob/   -  person j08691    schedule 14.03.2014
comment
Проверьте источник jquery github.com/jquery/jquery/blob/   -  person Aamir Afridi    schedule 14.03.2014
comment
Кажется, это дубликат... проверьте @ stackoverflow.com/questions/19315948/   -  person JQuery Guru    schedule 14.03.2014


Ответы (3)


node.insertBefore() в значительной степени эквивалентен: https://developer.mozilla.org/en-US/docs/Web/API/Node.insertBefore

$('#id').before('something');
//equivalent 
var node = document.getElementById('id');
node.parentNode.insertBefore('something', node);

Вот что делает jQuery: a13de27760ba1af883c0#file-gistfile1-js-L6064

before: function() {
    return this.domManip( arguments, function( elem ) {
        if ( this.parentNode ) {
            this.parentNode.insertBefore( elem, this );
        }
    });
}
person Karl-André Gagnon    schedule 14.03.2014

вы можете использовать insertBefore в javascript

node.insertBefore(newnode, existingchild);

В приведенном выше примере новый узел будет добавлен как дочерний узел узла непосредственно перед существующим дочерним узлом.

person Arjit    schedule 14.03.2014

Хорошо, эти ответы были немного обманчивы. Использование метода node.insertBefore немного отличается от использования метода jQuery .before().

// jQuery
$('.element').before('<span class="class-name">Some text</span>');

// Pure JS
var _$element = document.querySelector('.element');
var _$new = document.createElement('span');
_$new.outerHTML = '<span class="class-name">Some text</span>';
_$element.parentNode.insertBefore(_$new, _$element);

Если вам интересно, почему это выглядит так просто в фрагменте jQuery

before: function() {
    return this.domManip( arguments, function( elem ) {
        if ( this.parentNode ) {
            this.parentNode.insertBefore( elem, this );
        }
    });
}

Обратите внимание, что оно начинается с this.domManip. Эта функция делает что-то за кулисами, что позволяет абстрагироваться от создания элементов.

person Daniel Tonon    schedule 22.08.2018