jQuery empty()和remove()函数是否异步执行?

时间:2013-06-10 17:57:00

标签: jquery ajax asynchronous

jQuery.fn.empty()remove()函数是否异步执行?我在jQuery文档中找不到这个问题的答案。

3 个答案:

答案 0 :(得分:9)

他们都是同步的。您可以查看the source的实际实现:

remove: function( selector, keepData ) {
    var elem,
        elems = selector ? jQuery.filter( selector, this ) : this,
        i = 0;

    for ( ; (elem = elems[i]) != null; i++ ) {
        if ( !keepData && elem.nodeType === 1 ) {
            jQuery.cleanData( getAll( elem ) );
        }

        if ( elem.parentNode ) {
            if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
                setGlobalEval( getAll( elem, "script" ) );
            }
            elem.parentNode.removeChild( elem );
        }
    }

    return this;
},

empty: function() {
    var elem,
        i = 0;

    for ( ; (elem = this[i]) != null; i++ ) {
        if ( elem.nodeType === 1 ) {

            // Prevent memory leaks
            jQuery.cleanData( getAll( elem, false ) );

            // Remove any remaining nodes
            elem.textContent = "";
        }
    }

    return this;
},

你可以忽略keepDatacleanData的东西,所以你剩下的就是循环,调用本机DOM方法或DOM对象属性修改。这些都是同步的。

答案 1 :(得分:2)

不,它们是可链接的方法,因此它们将在返回原始jQuery对象之前完成。

答案 2 :(得分:1)

它们是同步的,如果你有理由希望它们是异步的(等到当前执行路径完成,然后在某个时候清空队列),你可以这样做:

// Empty asynchronously
setTimeout(function(){
    $('...').empty();
}, 0);