开发者社区> 问答> 正文

jquery closest的疑问

jquery中的closest方法可以用来查找制定的父类元素,并可以设置查询的上下文context,不过如果context正好是closest找的父类的话,貌似会被过滤掉,不知道是否是jquery的问题还是我理解有问题。代码如下:
jquery:

 var contextElem = document.getElementById("row1");
                 $("img").closest(".drow",contextElem).each(function(index,element){
                    console.log("Element:" + element.tagName + " " + element.id + " " + element.className);
                 });

<div id="oblock">
            <div class="dtable">
            <div id="row1" class="drow">
                <div class="dcell">
                    <img src=".\精通jQurery(2版)源代码\Chapter 06\aster.png"/><label for="aster">aster:</label>
                    <input name="aster" value="0" required>
                </div>
                <div class="dcell">
                    <img src=".\精通jQurery(2版)源代码\Chapter 06\daffodil.png"/><label for="daffodil">daffodil:</label>
                    <input name="daffodil" value="0" required>
                </div>
                <div class="dcell">
                    <img src=".\精通jQurery(2版)源代码\Chapter 06\rose.png"/><label for="rose">rose:</label>
                    <input name="rose" value="0" required>
                </div>
            </div>
            <div id="row2" class="drow">
                <div class="dcell">
                    <img src=".\精通jQurery(2版)源代码\Chapter 06\peony.png"/><label for="peony">peony:</label>
                    <input name="peony" value="0" required>
                </div>
                <div class="dcell">
                    <img src=".\精通jQurery(2版)源代码\Chapter 06\primula.png"/><label for="primula">primula:</label>
                    <input name="primula" value="0" required>
                </div>
                <div class="dcell">
                    <img src=".\精通jQurery(2版)源代码\Chapter 06\snowdrop.png"/><label for="snowdrop">snowdrop:</label>
                    <input name="snowdrop" value="0" required>
                </div>
            </div>
            </div>
        </div>

输出的结果是:elementId 是row2;
安jquery的描述应该是返回row1才对。。。谁可以帮忙解释下,谢谢!

展开
收起
吴孟桥 2016-06-02 15:57:07 1868 0
1 条回答
写回答
取消 提交回答
  • 你指定了上下文,肯定是在context下找了,你看源代码就清楚了

        var pos = jQuery.expr.match.POS.test( selectors ) ? 
                jQuery( selectors, context || this.context ) : null;
    
            return this.map(function( i, cur ) {
                while ( cur && cur.ownerDocument && cur !== context ) {
                    if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
                        return cur;
                    }
                    cur = cur.parentNode;
                }
                return null;
            });

    看了下源代码,jQuery.expr.match.POS内容为/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)(?![^\[]*\])(?![^\(]*\))/,意思就是selectors为这些选择器的时候才会在context下找(不包括context,看while中cur !== context 才会return DOM,否则是null),否则就是排除你传入的context,你看map里面的while语句 while ( cur && cur.ownerDocument && cur !== context )

    2019-07-17 19:25:06
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关课程

更多

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载