Javascript jquery-知道前两个父级的最快选择器

Javascript jquery-知道前两个父级的最快选择器,javascript,jquery,jquery-selectors,selector,Javascript,Jquery,Jquery Selectors,Selector,我有以下设置: var el = $("#overParent"); // Do whatever with el here. var cls = $(".valueElement", "#parent"); // Get elements with class valueElement inside element with id parent // Do whatever 这是工作,但我想知道我是否可以使这更快。我知道父级是已选择的超额租金中的一个元素。我能不能用它只扫描父对象的e

我有以下设置:

 var el = $("#overParent");
 // Do whatever with el here.
 var cls = $(".valueElement", "#parent"); // Get elements with class valueElement inside element with id parent
 // Do whatever
这是工作,但我想知道我是否可以使这更快。我知道父级是已选择的超额租金中的一个元素。我能不能用它只扫描父对象的el Overprent,然后获取具有指定类的元素


类似于:$.valueElement、parent、el,但根据文档,$只接受2个参数。

如果您是通过ID查找元素,则只需使用:

var $element = $('#id');
在不提供任何上下文的情况下,搜索将始终 这是最快的方式


同样,在这里,如果您提供一个ID作为搜索的上下文,那么父级是最快的选择器。理论上,您可以使用Overprent>parent来实现您的意思,但实际上这意味着要做更多的工作,而且速度会更慢。

如果您通过ID查找元素,则只需使用:

var $element = $('#id');
在不提供任何上下文的情况下,搜索将始终 这是最快的方式

同样,在这里,如果您提供一个ID作为搜索的上下文,那么父级是最快的选择器。理论上,您可以使用Overprent>parent来实现您的意思,但实际上这意味着要做更多的工作,而且速度会更慢。

像“theId”这样的选择器不会让jQuery扫描文档,因为它使用document.getElementById

如果要查找知道其id的元素,即使知道其父元素,也要始终使用$'theid'

事实上,如果您将父元素作为上下文提供,jQuery将调用document.getElementById,然后检查父元素是否包含找到的元素。因此,这要慢得多

从源代码:

    // Speed-up: Sizzle("#ID")
    if ( (m = match[1]) ) {
        if ( nodeType === 9 ) {
            elem = context.getElementById( m );
            // Check parentNode to catch when Blackberry 4.6 returns
            // nodes that are no longer in the document #6963
            if ( elem && elem.parentNode ) {
                // Handle the case where IE, Opera, and Webkit return items
                // by name instead of ID
                if ( elem.id === m ) {
                    results.push( elem );
                    return results;
                }
            } else {
                return results;
            }
        } else {
            // Context is not a document
            if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
                contains( context, elem ) && elem.id === m ) {
                results.push( elem );
                return results;
            }
        }
类似地,如果要选择一个类中的所有元素,则不要指定父元素,这没有帮助

在您的情况下,由于您似乎希望使用父对象来限制集合,只需使用

$(".valueElement", "#parent");
像“theId”这样的选择器不会让jQuery扫描文档,因为它使用document.getElementById

如果要查找知道其id的元素,即使知道其父元素,也要始终使用$'theid'

事实上,如果您将父元素作为上下文提供,jQuery将调用document.getElementById,然后检查父元素是否包含找到的元素。因此,这要慢得多

从源代码:

    // Speed-up: Sizzle("#ID")
    if ( (m = match[1]) ) {
        if ( nodeType === 9 ) {
            elem = context.getElementById( m );
            // Check parentNode to catch when Blackberry 4.6 returns
            // nodes that are no longer in the document #6963
            if ( elem && elem.parentNode ) {
                // Handle the case where IE, Opera, and Webkit return items
                // by name instead of ID
                if ( elem.id === m ) {
                    results.push( elem );
                    return results;
                }
            } else {
                return results;
            }
        } else {
            // Context is not a document
            if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
                contains( context, elem ) && elem.id === m ) {
                results.push( elem );
                return results;
            }
        }
类似地,如果要选择一个类中的所有元素,则不要指定父元素,这没有帮助

在您的情况下,由于您似乎希望使用父对象来限制集合,只需使用

$(".valueElement", "#parent");

只需使用常规id选择器即可:

$('#element');
它仍然是最快的,即使您已经选择了父元素:


我在这里只是猜测,但我认为浏览器使用查找表根据其id属性查找元素。

只需使用常规id选择器即可:

$('#element');
它仍然是最快的,即使您已经选择了父元素:

我在这里只是猜测,但我认为浏览器使用查找表根据其id属性查找元素。

根据

这是非常有效的thn有另一个选择器连接到它

对于id选择器,jQuery使用JavaScript函数document.getElementById,这非常高效。当另一个选择器附加到id选择器(如h2pageTitle)时,jQuery会在将元素标识为匹配项之前执行额外的检查

根据

这是非常有效的thn有另一个选择器连接到它

对于id选择器,jQuery使用JavaScript函数document.getElementById,这非常高效。当另一个选择器附加到id选择器(如h2pageTitle)时,jQuery会在将元素标识为匹配项之前执行额外的检查

@搅拌机

如果使用类并缓存上下文元素,则提供上下文的速度更快:

@搅拌机

如果使用类并缓存上下文元素,则提供上下文的速度更快:


对总的来说,你是对的。但在这种情况下,我已经选择了父对象。这无关紧要。告诉jQuery在DOM的某个特定部分中查找父级,无论您是否已经选择了该特定部分,都会比仅请求具有特定ID的元素要慢,这始终是最快的查询。是的。。。总的来说,你是对的。但在这种情况下,我已经选择了父对象。这无关紧要。告诉jQuery在DOM的某个特定部分中查找父级,无论您是否已经选择了该特定部分,都会比仅请求具有特定ID的元素要慢,这始终是最快的查询。是的。。。总的来说,你是对的。但在这种情况下,我已经选择了父项。@zozo即使选择了父项,也可以更快地给出id。将父项添加为上下文会增加一个检查。是的。。。总的来说,你是对的。但在本例中,我已经选择了父对象。@zozo即使选择了父对象,也会失败 ter只提供id。将父项添加为上下文将添加一个检查。