如何使用 CSS 选择器通过其 innerHTML 值获取 Child? [复制]

Posted

技术标签:

【中文标题】如何使用 CSS 选择器通过其 innerHTML 值获取 Child? [复制]【英文标题】:How to grab a Child by its innerHTML value using CSS Selector? [duplicate] 【发布时间】:2017-07-23 04:59:33 【问题描述】:

我有这个 html

<ul class="ui-autocomplete-list smart-close-iztgn224" style="opacity: 1; visibility: visible;  position: absolute; top: 141px; left: 309px;">
        <li data-value="1" class="visible">All</li>
        <li data-value="1" class="visible">John (123)</li>
        <li data-value="1" class="visible">Mary (456)</li>
        <li data-value="1" class="visible">Kelly (987)</li>

父类有“ui-autocomplete-list smart-close-iztgn224”类,它有 4 个子类。

我可以使用什么 CSS 选择器来抓取包含“玛丽”的孩子?

我尝试过使用

document.querySelector("ul.ui-autocomplete-list > li.visible");  

但是我不知道如何通过它的 innerHTML 值来获取一个孩子。

谢谢。

【问题讨论】:

看看这里:***.com/questions/1520429/… 【参考方案1】:

css 选择器不提供通过.textContent.innerHTML 选择元素的方法。您可以包含一个额外的data-* 属性,或者在data-* 属性中使用JSON 并使用属性选择器

document.querySelector("li[data-name='Mary']").style.color = "sienna";
<ul class="ui-autocomplete-list smart-close-iztgn224" style="opacity: 1; visibility: visible;  position: absolute;">
  <li data-value="1" data-name="All" class="visible">All</li>
  <li data-value="1" data-name="John" class="visible">John (123)</li>
  <li data-value="1" data-name="Mary" class="visible">Mary (456)</li>
  <li data-value="1" data-name="Kelly" class="visible">Kelly (987)</li>
</ul>

document.querySelector("li[data-props*='Mary']").style.color = "sienna";
<ul class="ui-autocomplete-list smart-close-iztgn224" style="opacity: 1; visibility: visible;  position: absolute;">
  <li data-props='"value":"1", "name":"All"' class="visible">All</li>
  <li data-props='"value":"1", "name":"John"' class="visible">John (123)</li>
  <li data-props='"value":"1", "name":"Mary"' class="visible">Mary (456)</li>
  <li data-props='"value":"1", "name":"Kelly"' class="visible">Kelly (987)</li>
</ul>

【讨论】:

【参考方案2】:

您无法使用 CSS 选择器获取 innerHTML 值,但是如果您明智的话,您可以获取所有 li 元素并使用 forEach() 来定位所需的元素。

var elements = document.querySelectorAll("ul.ui-autocomplete-list > li.visible");
elements.forEach(function(elem) 
  if (elem.textContent.includes('Mary'))
    elem.classList.add('red')
);
.red 
  color: red
<ul class="ui-autocomplete-list smart-close-iztgn224" style="opacity: 1; visibility: visible;  position: absolute; top: 141px; left: 309px;">
  <li data-value="1" class="visible">All</li>
  <li data-value="1" class="visible">John (123)</li>
  <li data-value="1" class="visible">Mary (456)</li>
  <li data-value="1" class="visible">Kelly (987)</li>
</ul>

【讨论】:

【参考方案3】:

您无法使用 css 选择器获取 innerHTML 值,而 querySelector 使用 CSS 选择器。 如果你可以使用Jquery,那么使用contains Selector就可以轻松完成。

$("ul.ui-autocomplete-list &gt; li:contains('John')").css( "color", "red" );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul class="ui-autocomplete-list smart-close-iztgn224" style="opacity: 1; visibility: visible;  position: absolute; top: 141px; left: 309px;">
        <li data-value="1" class="visible">All</li>
        <li data-value="1" class="visible">John (123)</li>
        <li data-value="1" class="visible">Mary (456)</li>
        <li data-value="1" class="visible">Kelly (987)</li>
</ul>

如果您仅限于使用 JS,您可以做的另一件事是您可以将 data-attribute 添加到每个 li 元素并根据它们的 data-attribute 值选择元素

【讨论】:

【参考方案4】:

如果你可以使用 jQuery,你可以使用包含选择器:

$(("ul.ui-autocomplete-list > li:contains('mary')"))

对于原生 javascript,这是可行的:

var mary = [].slice.call(document.querySelectorAll("ul.ui-autocomplete-list > li.visible")).filter(function (item)
    return item.innerText.includes("mary");
)[0];

【讨论】:

以上是关于如何使用 CSS 选择器通过其 innerHTML 值获取 Child? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

网站可以阻止您在其页面上使用 CSS 选择器吗?

使用查询选择器获取以特定 innerHTML 开头的所有元素?

Angular 5 - 使用 InnerHtml 绑定组件选择器

如何通过jQuery选择使用javascript动态生成的innerHTML元素[重复]

css选择器

如何使用 CSS 选择器访问具有此形状的元素 [重复]