Jquery get元素包含具有特定html值的子元素
我想使用Jquery向“li”元素添加一个类,该元素包含一个html/val等于零的“span”元素 例如,如果我的代码如下所示:Jquery get元素包含具有特定html值的子元素,jquery,Jquery,我想使用Jquery向“li”元素添加一个类,该元素包含一个html/val等于零的“span”元素 例如,如果我的代码如下所示: <ul> <li><span>Item 1</span><span class="num">30</span></li> <li><span>Item 2</span><span class="num">0</sp
<ul>
<li><span>Item 1</span><span class="num">30</span></li>
<li><span>Item 2</span><span class="num">0</span></li>
<li><span>Item 3</span><span class="num">20</span></li>
</ul>
然而,在这种情况下,这将导致:
<ul>
<li class="disabled"><span>Item 1</span><span class="num">30</span></li>
<li class="disabled"><span>Item 2</span><span class="num">0</span></li>
<li class="disabled"><span>Item 3</span><span class="num">20</span></li>
</ul>
第130项
第20项
第320项
这显然是行不通的。。。谢谢试试:
$('li span.num').filter(
function(i){
return $(this).text() == '0';
}).closest('li').addClass('selected');
.试试这个
$('ul span.num').filter(function(){
return $(this).text() == "0";
}).parent().addClass('disabled');
您可以将
元素与匹配,然后使用以下内容获取其父元素:
这应该是你想要的
$('li').each(function(){
if( $(this).find('span.num').text() == '0' ) $(this).addClass('disabled')
});
我会提出以下建议:
<ul>
<li><span>Item 1</span><span class="num">30</span></li>
<li class="disabled"><span>Item 2</span><span class="num">0</span></li>
<li><span>Item 3</span><span class="num">20</span></li>
</ul>
$('li').has('span.num:contains(0)').addClass('disabled')
但它不起作用,因为它会检查html中是否存在该值,而不是检查是否存在完全匹配的值。在本例中,每个span.num元素中都有一个0,因此每个li都将获得所选的类。似乎没有与:contains()选择器对应的:equals()。这里有一个快速方法:
$('li .num').each(function(){
if ( $(this).text() == '0') $(this).parent().addClass('disabled');
});
使用为什么要添加选定类而不是禁用类??因为我们正在禁用项目,用户没有选择任何内容。这将不会生成OP所需的输出。为什么返回$(This)而不是true或false?@ShankarSangoli:oops。是的,你说得对。出于某种原因,我以为他想要30码。谢谢并编辑!=)在
span.num
之外的文本中添加span
怎么样?您是指类似项目1
的文本吗?提问者的标记中已经有
元素围绕这些元素。我是否遗漏了什么?我很感激使用.has和“contains”的附加注释。这正是我希望采取的方法。也许这是不可能的,但谁知道我将来可能需要这样的东西。我没有马上看这个,但它也很好用,所以+1。filter
和每个
用于两个不同的操作。当您希望根据任何条件筛选匹配的元素集时,可以使用filter
,其中as每个
用于循环遍历所有匹配的元素集并对其执行任何操作。在您的例子中,filter
最适合,因为您希望筛选元素(text==0)并应用所需的类(disbaled)。事实证明,我实际上必须从不再为0的值中删除“disabled”类,因此。每个都是我的最佳选择。但考虑到我的问题中实际要求的内容,我明白了为什么过滤器是显而易见的选择。感谢您的回复和解释!
$('li').has('span.num:contains(0)').addClass('disabled')
$('li .num').each(function(){
if ( $(this).text() == '0') $(this).parent().addClass('disabled');
});