jQuery问题:首先如何解决

jQuery问题:首先如何解决,jquery,Jquery,我在html中有一个span标记,它可以在页面上出现多次 我只想选择第一个跨度标记。我是这样做的 var $myvar= $(".mydiv .indiv .myspan:first"); 就目前而言,它运行良好 我认为我的代码将阻止浏览器遍历整个DOM,因为我正在使用:第一,这将提高性能。我说得对吗 还有一个问题: HTML: 此html有2个锚定标记。我想在单击此“a”标记时编写一个函数。为此,我可以尝试类似$.mydiv.indiv a.ClickFunction的方法 但是假设HTMl

我在html中有一个span标记,它可以在页面上出现多次

我只想选择第一个跨度标记。我是这样做的

var $myvar= $(".mydiv .indiv .myspan:first");
就目前而言,它运行良好

我认为我的代码将阻止浏览器遍历整个DOM,因为我正在使用:第一,这将提高性能。我说得对吗

还有一个问题:

HTML:

此html有2个锚定标记。我想在单击此“a”标记时编写一个函数。为此,我可以尝试类似$.mydiv.indiv a.ClickFunction的方法 但是假设HTMl中有一个相同的重复结构,所以它也适用于重复集合“a”标记,这是我不想要的。我只想要第一个集合“a” 标签工作。 “a”标记的功能是,onload第二个将处于隐藏状态,因此单击第一个,第二个将被显示,第一个将处于隐藏状态,单击第二个反向操作将发生,希望这次我已经澄清:-

回答第一个问题 很抱歉告诉您,使用:first不会使您的选择更快。但这不是浏览器的错。这就是jQuery的工作方式。顺便说一句,如果你的页面不是超大型的,比如说,mydiv的几百个匹配项,那么你的选择器看起来是什么并不重要

$(".mydiv .indiv .myspan:first");
jQuery首先选择DOM中设置了mydiv类的所有元素。 它到处都是!在步骤1中找到元素,并使用类indiv set查找其所有子体。 它到处都是!元素,并使用类myspan set查找其所有子体 最后它在所有地方循环!!!元素,并确定它是否是第一个元素 尤其是第4步不是您通常期望的。只返回第一个find.myspan元素就足够了,但jQuery使用的Sizzle选择器库不是这样工作的

因此,改进此选择器的唯一方法是使用

$(".mydiv .indiv .myspan").eq(0);
这至少为您在步骤4中节省了循环

或者找到一个更简洁的选择器

对第二个问题的答复 如果我没听错的话,你就把第二个藏起来

$(".indiv > a").eq(1).hide();
那么下面的内容应该是你想要的。隐藏第一个独立文件中的第二个链接。仅将单击处理程序附加到前两个链接。它们相互显示/隐藏

$(document).ready(function(){
    $(".indiv").eq(0).children("a").eq(1).hide();
    $(".indiv").eq(0).children("a").each(function(i,e) {
        var x = $(e);
        if(i==0) {
            x.click(function(){
                x.hide();
                x.next().show(); 
            });
        } else {
            x.click(function(){
                x.hide();
                x.prev().show(); 
            });
        }
    }); 
});
对你的问题有几点评论:

没有设置类myspan,但只包含文本myspan。类属性是否丢失或选择器是否错误

假设你真的有这样的跨度。。。。。页面上是否有设置了此类但不应选择的跨距?如果没有,您可以将选择器重写为

$(".myspan").eq(0);
对第一个问题的答复 很抱歉告诉您,使用:first不会使您的选择更快。但这不是浏览器的错。这就是jQuery的工作方式。顺便说一句,如果你的页面不是超大型的,比如说,mydiv的几百个匹配项,那么你的选择器看起来是什么并不重要

$(".mydiv .indiv .myspan:first");
jQuery首先选择DOM中设置了mydiv类的所有元素。 它到处都是!在步骤1中找到元素,并使用类indiv set查找其所有子体。 它到处都是!元素,并使用类myspan set查找其所有子体 最后它在所有地方循环!!!元素,并确定它是否是第一个元素 尤其是第4步不是您通常期望的。只返回第一个find.myspan元素就足够了,但jQuery使用的Sizzle选择器库不是这样工作的

因此,改进此选择器的唯一方法是使用

$(".mydiv .indiv .myspan").eq(0);
这至少为您在步骤4中节省了循环

或者找到一个更简洁的选择器

对第二个问题的答复 如果我没听错的话,你就把第二个藏起来

$(".indiv > a").eq(1).hide();
那么下面的内容应该是你想要的。隐藏第一个独立文件中的第二个链接。仅将单击处理程序附加到前两个链接。它们相互显示/隐藏

$(document).ready(function(){
    $(".indiv").eq(0).children("a").eq(1).hide();
    $(".indiv").eq(0).children("a").each(function(i,e) {
        var x = $(e);
        if(i==0) {
            x.click(function(){
                x.hide();
                x.next().show(); 
            });
        } else {
            x.click(function(){
                x.hide();
                x.prev().show(); 
            });
        }
    }); 
});
对你的问题有几点评论:

没有设置类myspan,但只包含文本myspan。类属性是否丢失或选择器是否错误

假设你真的有这样的跨度。。。。。页面上是否有设置了此类但不应选择的跨距?如果没有,您可以将选择器重写为

$(".myspan").eq(0);

读到你的问题,我感到很困惑?你能用另一种方式表达它吗?还是我的理解有问题?请澄清HTML代码后面的部分。看不懂/搞不懂你真正想要的是什么我在读你的问题时感到很困惑?你能用另一种方式表达它吗?还是我的理解有问题?请澄清HTML代码后面的部分。无法理解/弄明白你真正想要的是什么有没有办法找到更简洁的选择器?第二个问题是什么?检查扩展答案+对第二个问题的评论编辑了这篇文章,请看一看。你也可以做$.myspan:eq0。我不确定这是不是真的
izzle jQuery的选择器引擎经过优化,可以在找到第一个元素后停止搜索。“我很想帮你查一下,但“嘶嘶声”超出了我的理解范围。”奇怪的“查一下”扩展了答案。顺便说一句,只要你的页面大小合理,例如,有没有办法找到更简洁的选择器?第二个问题是什么?检查扩展答案+对第二个问题的评论编辑了这篇文章,请看一看。你也可以做$.myspan:eq0。我不确定Sizzle jQuery的选择器引擎是否经过优化,在找到第一个元素后停止搜索。“我很想帮你查一下,但“嘶嘶声”超出了我的理解范围。”奇怪的“查一下”扩展了答案。顺便说一句,只要你的页面大小合理,例如。