你如何获得更广泛的上下文 HTML,在 jQuery 或 Cheerio js 中包装给定的选择器代码?

Posted

技术标签:

【中文标题】你如何获得更广泛的上下文 HTML,在 jQuery 或 Cheerio js 中包装给定的选择器代码?【英文标题】:How do you get the wider context HTML that wraps a given selector code in jQuery or Cheerio js? 【发布时间】:2021-05-30 03:26:48 【问题描述】:

如果h1+ul>li>details>summary+p只有这样的结构,你如何获得整个html?即,如果它没有嵌套的 li、详细信息等,它将不会获取 ul 标记元素的 HTML。

h1+ul>li>details>summary+p
<div>
  <h1>T1</h1>
  <ul class="toggle">
    <li>
      <details>
        <summary><strong>Q1</strong></summary>
        <p>Answer1</p>
      </details>
    </li>
  </ul>
  <h1>T2</h1>
  <ul class="toggle">
    <li>
     <details>
       <summary>Q2</summary>
       <strong>Answer2</strong>
     </details>
    </li>
  </ul>
</div>

【问题讨论】:

我给你做了一个sn-p。请添加与您预期的选择器不对应但仍被选中的 HTML - 或者您是否希望 UL 中的整个内容具有特定样式? 听起来你需要一个组合的 .has jQuery 选择器 所以目前 CSS 在 p 上工作 - 如果它们符合您的选择器,您希望选择器选择 UL 及其后代? @mplungjan 该问题已被编辑为包含我不想选择的第二个 UL 元素,因为它不遵循 ul>li>details>summary+p 模式。但在 jQuery 中,该模式仅将 HTML 返回到最后一个元素,即 p @mplungjan 完全正确 【参考方案1】:

像这样?

const $collection = $("ul.toggle")
  .has("li>details>summary+p")
  .prev()
  .addBack()
  .addClass("red")
  
console.log($collection.text())  
.red  background-color:red 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
  <h1>T1</h1>
  <ul class="toggle">
    <li>
      <details>
        <summary><strong>Q1</strong></summary>
        <p>Answer1</p>
      </details>
    </li>
  </ul>
  <h1>T2</h1>
  <ul class="toggle">
    <li>
     <details>
       <summary>Q2</summary>
       <strong>Answer2</strong>
     </details>
    </li>
  </ul>
</div>

【讨论】:

所以这行得通,但我意识到,我过于简化了我的例子。我已经编辑以包含我还想选择的 h1 标签。这又增加了一层难度。 $("h1 + ul.toggle").has("li>details>summary+p").addClass("red") 不会选择 h1,因为第一部分只返回 ul.toggle。我在想也许在第一个位完成后得到 ul 的前一个兄弟,但它看起来很hacky。 另外,我对添加类并不太在意,我想检索符合选择器模式的原始 HTML 我更新了脚本,因为我们可以一直链接

以上是关于你如何获得更广泛的上下文 HTML,在 jQuery 或 Cheerio js 中包装给定的选择器代码?的主要内容,如果未能解决你的问题,请参考以下文章

在vue中如何引jquer

jquer formSerialize(); $('#imagefile_form').serialize(); 表单提交时怎么获得不到值。form.js已引用

什么程序用于在 html 上下文中处理 php 文件?

是否有可能懒散地获得Traversable的所有上下文?

为什么在Python中“更容易请求宽恕而不是获得权限”?

如何在 Android 中获取 BaseAdapter 的上下文