【问题标题】:How to grab a Child by its innerHTML value using CSS Selector? [duplicate]如何使用 CSS 选择器通过其 innerHTML 值获取 Child? [复制]
【发布时间】: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 值来获取一个孩子。

谢谢。

【问题讨论】:

标签: javascript css-selectors


【解决方案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];
        

        【讨论】:

          猜你喜欢
          • 2012-09-25
          • 1970-01-01
          • 1970-01-01
          • 2023-03-21
          • 2014-03-21
          • 1970-01-01
          • 2015-10-15
          • 2013-04-30
          • 1970-01-01
          相关资源
          最近更新 更多