我在html中有一个span标记,这<span>
可以在页面上多次出现.
我想只选择第一个span标签.我是这样做的
var $myvar= $(".mydiv .indiv .myspan:first");
Run Code Online (Sandbox Code Playgroud)
现在它的工作正常.
我认为我的代码将阻止浏览器遍历整个DOM,因为我正在使用:first,
它将提高性能.我对么?
还有一个问题:
HTML:
<div class="mydiv">
<div class="indiv">
<span>myspan</span>
<a href="#" class="anc1">a1</a>
<a href="#" class="anc2">a2</a>
</div>
<table>
..................
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
这个html有2个锚标签.我想在点击这个'a'标签时编写一个函数.为此我可以尝试类似$(".mydiv .indiv a")的东西.点击(函数(e)它会work.but假设,在HTMl中有一个相同的重复结构,所以它也可以用于重复设置'a'标签,我不想要.我只想要第一组'a'标签工作. 'a'标签是,onload 2 nd将处于隐藏状态,所以点击1,第2个将被显示,第一个将处于隐藏状态,并且点击第2个反向动作将发生,希望这个我已经说清楚自己了:-)
很抱歉告诉你但使用:first
不会让你的选择更快.但这并不是浏览器的错误.这就是jQuery的工作原理.(顺便说一句.如果你的页面不是超大,例如几百个匹配,例如mydiv你的选择器看起来并不重要)
$(".mydiv .indiv .myspan:first");
Run Code Online (Sandbox Code Playgroud)
mydiv
集的所有元素.indiv
集的后代.myspan
集的后代特别是第4步不是你通常所期望的.因为只返回第一个找到的.myspan
元素就足够了,但这不是jQuery使用的Sizzle选择器库的工作方式.
所以改进这个选择器的唯一方法就是使用
$(".mydiv .indiv .myspan").eq(0);
Run Code Online (Sandbox Code Playgroud)
至少在第4步让你失去了循环
或者找到一个更简洁的选择器
如果我理解你正确你隐藏第二个<a>
类似于此
$(".indiv > a").eq(1).hide();
Run Code Online (Sandbox Code Playgroud)
然后以下应该做你想要的.首先隐藏第二个链接indiv
.click
仅将处理程序附加到前两个链接.哪个显示/隐藏对方.
$(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();
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
您对问题的一些评论:
在<span>
没有固定的一类myspan
,但只包含文本myspan
.class属性是否缺失或者您选择了错误.
假设你真的有这样的跨度<span class="myspan">....</span>
.页面上是否有任何跨度也设置了此类但不应该被选中?如果没有,你可以重写你的选择器
$(".myspan").eq(0);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
62 次 |
最近记录: |