HTML
$(".something > ol li").each(function () {
alert($(this).text());
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="something">
<ol>
<li>Something</li>
<ol>
<li>Something 2</li>
</ol>
<li>Something 3</li>
</ol>
</div>
&#13;
它会提醒Something,Something 2和Something 3。
我需要的是仅提醒直接子项。所以我只需要警告Something and Something 3.
我该怎么做?
非常感谢!
答案 0 :(得分:3)
您的原始选择器已关闭。选择器A > B
匹配A
的匹配B
的直接子项,而不是遍历所有后代。
因此,以下内容适用于您:
$(".something > ol > li").each(function () {
alert($(this).text());
});
答案 1 :(得分:1)
仅从li
获取ol
childrens。这样,您将跳过列表中的其他标记。
$(".something > ol").children('li').each(function () {
alert($(this).text());
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="something">
<ol>
<li>Something</li>
<ol>
<li>Something 2</li>
</ol>
<li>Something 3</li>
</ol>
</div>
&#13;
答案 2 :(得分:0)
您的HTML无效。 <ol>
不能直接包含其他<ol>
。资料来源:w3.org。
您需要将其嵌套在<li>
:
<div class="something">
<ol>
<li>Something
<ol>
<li>Something 2</li>
</ol>
</li>
<li>Something 3</li>
</ol>
</div>
接受的答案将不再起作用,因为所有子元素的文本将由text()返回。 有一种肮脏的方式来获得直接孩子李的文字:
$(".something > ol > li").each(function () {
var text = $(this).clone()
.children()
.remove()
.end()
.text();
alert(text);
});
但我推荐一种更简洁的方法,将文字包装在一个范围内:
<div class="something">
<ol>
<li><span>Something</span>
<ol>
<li>Something 2</li>
</ol>
</li>
<li>Something 3</li>
</ol>
</div>
现在这个JS会起作用:
$(".something > ol > li > span").each(function () {
alert($(this).text());
});