【问题标题】:How to exclude one child in XPath/CSS locator如何在 XPath/CSS 定位器中排除一个孩子
【发布时间】:2019-04-12 09:06:50
【问题描述】:

除了'by'还有什么方法可以获取div的内部文字吗?

<div class="name">
    "by "
    <em>Some Author</em>
    ", "
    <em>Another Author</em>
</div>

【问题讨论】:

    标签: html xpath css-selectors


    【解决方案1】:

    您的 HTML 非常奇怪的是引号和“Some Author”&lt;em&gt; 和逗号之间的空格。我假设您的意思是:

    <div class="name">
      by <em>Some Author</em>, <em>Another Author</em>
    </div>
    

    使用 XPath,您可以使用如下查询获取节点:

    //*[@class='name']/node()[position()>1]
    

    如果我们谈论的是浏览器环境,并且您想要一个字符串,而不仅仅是一个节点集合,您可以这样做:

    document.querySelector('div.name').textContent.replace(/^\s*by\s*/, '')
    

    【讨论】:

      【解决方案2】:

      您可以像这样使用 Jquery 进行操作...但它也会删除 ","... 看看吧:

      $(document).ready(function(){
        var name = $('div').children('em');
        $('div').html(name);
      });
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <div class="name">
          "by "
          <em>Some Author</em>
          ", "
          <em>Another Author</em>
      </div>

      【讨论】:

        【解决方案3】:

        你可以试试这个表达式:

        //em/text()
        

        输出:

            'Some Author'
            'Another Author'
        

        【讨论】:

          【解决方案4】:

          您可以尝试在 XPath 下获取所有后代文本节点,第一个除外

          (//div//text())[position() > 1]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-11-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多