好的,正如所承诺的,这是真正的交易,首先是样本html:
<li data-foo="bar">
<span id="a"></span>
<ul>
<li>
<span id="1"></span>
<ul>
<li>
<span id="b"></span>
</li>
</ul>
</li>
<li>
<span id="2"></span>
<ul>
<li>
<span id="c"></span>
</li>
</ul>
</li>
</ul>
</li>
<li data-foo="bar">
<span id="d"></span>
<ul>
<li>
<span id="3"></span>
<ul>
<li>
<span id="e"></span>
</li>
</ul>
</li>
<li>
<span id="4"></span>
<ul>
<li>
<span id="f"></span>
</li>
</ul>
</li>
</ul>
</li>
我想让窗口弹出“12”,然后弹出“34” ...所以这是我的嵌套函数尝试:
<script>
var poptext = "";
$('li[data-foo=bar]').each(
function () {
$(this li span).each(function () {
poptext = poptext + $(this).attr("id");
}
alert(poptext);
poptext = "";
);
}
);
</script>
这似乎没有用,我认为Jquery可能会混淆多个“this”关键字?此外,对于那些跨度的选择器可能存在问题。
谢谢你们!
答案 0 :(得分:1)
您的代码中存在语法错误,$(this li span)
也应该是$('li span', this)
您的逻辑关闭,您没有过滤掉带有字母ID的跨度。
答案 1 :(得分:1)
我认为您正在寻找直接后代选择器:>
像这样使用:
$('li[data-foo=bar]').each(function () {
var poptext = "";
$(this).find('> ul > li > span').each(function () {
poptext = poptext + $(this).attr("id");
});
alert(poptext);
});
只会在左侧选择前一个表达式的直接子节点。
更详细,但也许可读的版本可能是:
$(this).children('ul').children('li').children('span') // selects the same
在此处查看此行动:http://jsfiddle.net/xYgJg/
答案 2 :(得分:0)
此行有语法错误:
$(this li span).each(function () {
“this”是“each”循环中的当前dom元素,因此一种方法是将它包装在jQuery对象中并调用“.find()”并传入另一个选择器以获取所需的嵌套元素
获得您正在寻找的答案的逻辑也是错误的。我不知道你到底想要找到什么,但这里有一种方法可以得到你想要的答案
var poptext = "",
id;
$('li[data-foo=bar]').each(function () {
$(this).find('li span').each(function () {
id = $(this).attr("id");
if (!isNaN(id)){
poptext = poptext + $(this).attr("id");
}
});
alert(poptext);
poptext = "";
});
这里有一个jsfiddle:http://jsfiddle.net/kEjt7/1/