【问题标题】:Select div class containing specific text [duplicate]选择包含特定文本的 div 类 [重复]
【发布时间】:2015-10-16 10:49:10
【问题描述】:

我正在尝试选择具有特定文本的 div 类。

示例:<div class="foo">Foo39</div>

所以,如果 foo 类包含“foo39”文本,那么它应该是红色的,如果它包含其他文本,那么它应该是绿色的!

我尝试使用 CSS,但没有成功!

【问题讨论】:

  • 发布你到目前为止所尝试的内容
  • @Pangloss:我想说这不是重复的。引用的问题询问是否检查内部 HTML 包含 特定字符串。这个问题询问关于内部 HTML 的相等性检查。
  • @Kwarrtz 你说得对,我没有看到 jquery 标签,也没有在问题的任何地方提到它,很高兴你解决了,毕竟这是一个 JS 问题。跨度>

标签: jquery html css


【解决方案1】:

JQuery 提供了:contains 选择器,使用方式如下:

$('.foo:contains(Foo39)').css('background-color', 'red');
$('.foo:not(:contains(Foo39))').css('background-color', 'green');

【讨论】:

  • 好!它有效 :) 但它把整个页面变成了绿色!
  • 解决了!非常感谢先生!
  • 最后一个问题!当文件准备好时我们如何触发它。载入或准备好文件?
  • $('document').ready(function() { ... })
【解决方案2】:

并且使用纯 javascript,因为您没有提到您使用的是 jQuery....但适用于本机 querySelctor/All

使用 querySelctorAll 可能比 jquery 的 .contains 性能更高

<div class="foo">Foo37</div>
<div class="foo">Foo38</div>
<div class="foo">Foo39</div>
<div class="foo">Foo40</div>

<script>
var find = "Foo40";
var needle;
var haystack = document.querySelectorAll(".foo");
var i;

for (i = 0; i < haystack.length; i++) {
    if(haystack[i].innerHTML == find){
         console.log("found");
         haystack[i].style.background = "red";
    }else{
         haystack[i].style.background = "green";
    }
}
</script>

使用 getElementsByClassName 可能比 querySelectorAll 性能更高

<div class="foo">Foo37</div>
<div class="foo">Foo38</div>
<div class="foo">Foo39</div>
<div class="foo">Foo40</div>

<script>
var find = "Foo40";
var needle;
var haystack = document.getElementsByClassName("foo");
var i;

for (i = 0; i < haystack.length; i++) {
    if(haystack[i].innerHTML == find){
         console.log("found");
         haystack[i].style.background = "red";
    }else{
         haystack[i].style.background = "green";
    }
}
</script>

【讨论】:

  • 这个解决方案的性能如何?
  • 好吧,如果你的意思是有效载荷大小。如果不需要 jQuery 框架,那么这可能会占用更少的空间。根据我最近阅读的内容。使用 getElementsByTagName 或 getElementsByClassName 使用纯 javascript 实际上是一种比新的原生 querySelectorAll 更快执行的方法,而且绝对比 jQuery 的 .contains 和 .find 方法...
  • 是的,占用空间肯定会更小,但对于大型文档来说,列表上的普通旧迭代似乎相当痛苦。我也相信 querySelectorAll 函数的实现因浏览器而异,但我认为它在任何情况下都不会非常慢。
  • 您不会选择整个文档。您将首先在您的 querySelectorAll("#myParentElemID .foo"); 中找到起始父元素。 querySelectorAll 支持在现代浏览器中已经存在了一段时间,并且首先由 IE8 引入。 -- 就像我提到的,getElementsByClassName 实际上是一个性能更好的查找。因此,基于问题和有限的信息,本机 js 在运行时的性能和数据包下载大小方面获胜。不幸的是,JSPERF.com 目前正在停机维护。
  • 这里是querySelector caniuse.com/#feat=queryselector@Kwarrtz的浏览器支持表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多