Javascript jQuery中的parentsUntil()使用相反的顺序?

Javascript jQuery中的parentsUntil()使用相反的顺序?,javascript,jquery,Javascript,Jquery,我有这个html结构: <body> <a> <b> <c> <d> </d> </c> </b> </a> </body> 它应该从下到上,这意味着s数组应该看起来像d、c、b、a 但它看起来很像:[“A”、“B”、“C”、“D”] 为什么呢 .andSelf()导致jQuery重新排序数组 您

我有这个html结构:

<body>
  <a>
    <b>
      <c>
        <d>
        </d>
      </c>
    </b>
  </a>
</body>
它应该从下到上,这意味着
s
数组应该看起来像
d、c、b、a

但它看起来很像:
[“A”、“B”、“C”、“D”]

为什么呢

.andSelf()
导致jQuery重新排序数组

您可以尝试:

 var s= $("d").parentsUntil("body").map(function(){
    return this.tagName;
  }).get();

此代码的输出如下所示:
[“C”、“B”、“A”]

如果查看
addBack的
代码(其中
和self是别名),您会看到:

add: function( selector, context ) {
    var set = typeof selector === "string" ?
            jQuery( selector, context ) :
            jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
        all = jQuery.merge( this.get(), set );

    return this.pushStack( jQuery.unique(all) );
},

addBack: function( selector ) {
    return this.add( selector == null ?
        this.prevObject : this.prevObject.filter(selector)
    );
}
因此,您可以看到它调用
unique

再往前看,你会发现

jQuery.unique = Sizzle.uniqueSort;


因此,
addBack
会对集合进行排序,因为它确保添加的元素还没有在里面。

您的问题是什么?是关于源代码的实现以及它是如何建立顺序的吗?我在问为什么数组中的第一个元素是
A
它应该是
d
的位置。我确实在源代码中搜索了它,但找不到它实际按相反顺序添加项目的位置。简单回答我的简单问题。谢谢。创建一个jQuery对象,指向文档顺序中的所有三个项:您说得对。
jQuery.unique = Sizzle.uniqueSort;
Sizzle.uniqueSort = function( results ) {
    var elem,
        duplicates = [],
        i = 1,
        j = 0;

    // Unless we *know* we can detect duplicates, assume their presence
    hasDuplicate = !support.detectDuplicates;
    results.sort( sortOrder );

    if ( hasDuplicate ) {
        for ( ; (elem = results[i]); i++ ) {
            if ( elem === results[ i - 1 ] ) {
                j = duplicates.push( i );
            }
        }
        while ( j-- ) {
            results.splice( duplicates[ j ], 1 );
        }
    }

    return results;
};