dau*_*lex 141 html jquery traversal tree-traversal
这是我开始使用的粗略html:
<li class="par_cat"></li>
<li class="sub_cat"></li>
<li class="sub_cat"></li>
<li class="par_cat"></li> // this is the single element I need to select
<li class="sub_cat"></li>
<li class="sub_cat"></li>
<li class="sub_cat current_sub"></li> // this is where I need to start searching
<li class="par_cat"></li>
<li class="sub_cat"></li>
<li class="par_cat"></li>
Run Code Online (Sandbox Code Playgroud)
我需要遍历.current_sub,找到最接近的先前.par_cat并做一些事情.
.find("li.par_cat")返回整个负载.par_cat(我在页面上有大约30个).我需要针对单一目标.
非常感谢任何提示:)
kar*_*m79 247
尝试:
$('li.current_sub').prevAll("li.par_cat:first");
Run Code Online (Sandbox Code Playgroud)
用你的标记测试它:
$('li.current_sub').prevAll("li.par_cat:first").text("woohoo");
Run Code Online (Sandbox Code Playgroud)
将li.par_cat用"woohoo" 填充最接近的前一个.
Ed *_*mes 17
尝试
$('li.current_sub').prev('.par_cat').[do stuff];
epr*_*hro 13
使用prevUntil()将允许我们得到一个遥远的兄弟,而不必得到所有.我有一个特别长的设置,使用prevAll()过于CPU密集.
var category = $('li.current_sub').prev('li.par_cat');
if (category.length == 0){
category = $('li.current_sub').prevUntil('li.par_cat').last().prev();
}
category.show();
Run Code Online (Sandbox Code Playgroud)
如果它匹配,这将得到第一个前面的兄弟,否则它得到匹配的兄弟之前的兄弟,所以我们只用prev()再一个来获得所需的元素.
我认为所有的答案都缺乏一些东西.我更喜欢使用这样的东西
$('li.current_sub').prevUntil("li.par_cat").prev();
Run Code Online (Sandbox Code Playgroud)
保存您不添加:首先在选择器内部,更容易阅读和理解.prevUntil()方法也有更好的性能,而不是使用prevAll()