如果包含特定文本,则运行jQuery。

16

如果加粗元素包含特定的文本,我需要运行一个jQuery代码。我做错了什么?

 <script>
 if ($('b:contains('Choose a sub category:')')) {

 $("td.colors_backgroundneutral").css("background-color","transparent");
 $("td.colors_backgroundneutral").children(':first-child').attr("cellpadding","0");
 };
 </script>

4
在单引号('')内使用双引号(""),这会使字符串出错,因为你正在在单引号内使用单引号。 - Thomas Shields
3个回答

28

除了在单引号内使用单引号 (这会破坏字符串),你还在 if 语句中使用了 jQuery 选择器。 这个选择器 只过滤出包含 "Choose a sub category" 的 b 标签,并返回这些元素的列表。它不会返回布尔值。 相反,应该使用 .contains() 方法,代码如下:

if($("b").contains("Choose a sub category")) {
   // do stuff 
}

您可以在这里阅读更多相关信息,与it技术有关。

编辑:由于.contains()方法似乎已被弃用,因此这里提供了一个纯JS解决方案:

var el = document.getElementById("yourTagId") // or something like document.getElementsByTagName("b")[0] if you don't want to add an ID.
if (el.innerHTML.indexOf("Choose a sub category") !== -1) {
    // do stuff
}

4
不幸的是,似乎 jQuery().contains 这个方法不再存在了,或者至少我所有尝试使用它的方式都会触发一个“没有这种函数调用”的错误。 jQuery.contains 存在,但它是专门用于处理 DOM 元素而不是文本字符串的。个人而言,我更喜欢使用方法调用而不是构造 :contains 选择器,所以如果 jQuery 确实移除了这个方法,那就相当令人烦恼了。 - Pebbl
@Pebbl,这就是使用jQuery的问题。更好的方式是使用原生JS,因为代码只会多几行。 - Thomas Shields
如果这个解决方案曾经适用于文本,根据此文档,它现在不再适用,因此答案不应标记为正确。ovahernow的解决方案确实符合问题所需的文本要求。 - Luke
我知道这已经很老了,但既然我通过网络搜索偶然发现了它,其他人也可能会。据我所知,$.contains从来没有用于文本字符串。然而,:contains选择器可以使用。参考链接 - Tijmen

17

我一直使用以下代码来判断一个元素是否存在:

if ($('b:contains("Choose a sub category:")').length > 0) { /*do things*/}

1
我不确定为什么被踩了,因为这是检查现有元素的推荐方法:https://dev59.com/V2455IYBdhLWcg3wAvNI - dev4life
1
我也是这么认为的;我相信那个踩你的人只是觉得不够理想,因为jQuery有一个专门针对这种情况的.contains()方法。请记住,OP并不想检查它是否存在,他只想知道粗体标签是否包含文本。虽然我们两个的解决方案都可以工作,但我的语义上更正确一些。:) 我还是给你点了赞。 :) - Thomas Shields
谢谢Tom。我也会选择你的建议。我只是想修复他现有的代码。我也已经为你的建议点赞了。 - dev4life

4
 if ($("b").has(":contains('Choose a sub category:')").length) { 
 /*Your Stuff Here*/
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接