javascript - jQuery 的问题包含选择 div 和 span 元素的方法

标签 javascript jquery html dom

我在通过 jQuery contains(arg) 方法选择 div/span 元素时遇到问题。我想计算包含特定文本的元素总数。但它对不同的 HTML 元素给出了不同的结果。请参阅下面的代码。

$(document).ready(function(){
	
  $("#co").text($("span:contains('cool')").length)
  $("#co1").text($("div:contains('cool')").length)
  $("#co2").text($("li:contains('cool')").length)
  $("#co3").text($("p:contains('cool')").length)
});
Span -<span id="co"> </span>
<div></div>
Div -<span id="co1"> </span>
<div></div>
Li -<span id="co2"> </span>
<div></div>
p -<span id="co3"> </span>
<br><br>

<div> <div> cool </div> </div>
<p> <p> cool </p> </p>
<ul><li> <li> cool </li> </li></ul>
<span> <span> cool </span> </span>

以上代码输出结果

Span -2
Div -2
Li -1 
p -1 

我只是不明白为什么,每个元素都应该有相同的计数。

最佳答案

要了解原因,请查看呈现的 HTML。当你有一个 <p>在另一个未关闭的里面<p> , 浏览器你想要结束之前的 <p>并开始一个新的,因为<p>不能嵌套。同样,一个 <li>不能直接存在于另一个内部 <li> - 它可能仅作为 <ul> 的子项存在(或 <ol> ),所以 <li> <li> cool </li> </li>被解释为 <li> </li><li> cool </li> .

另一方面,<span> s 和 <div> 可以相互嵌套,因此它们出现在文档中的方式与编写 HTML 的方式相同。

console.log(document.body.innerHTML);
<div> <div> cool </div> </div>
<p> <p> cool </p> </p>
<ul><li> <li> cool </li> </li></ul>
<span> <span> cool </span> </span>

因此,呈现的文档具有:

  • <span> <span> cool </span> </span> - 一个 cool嵌套在 2 <span> 内小号
  • <p> </p><p> cool </p> <p></p> - 一个 cool嵌套在 one<p> (其他 <p> 为空)
  • <ul><li> </li><li> cool </li> </ul> - 一个 cool嵌套在 one<li> (其他 <li> 为空)
  • <div> <div> cool </div> </div> - 一个 cool嵌套在 2 <div> 内小号

关于javascript - jQuery 的问题包含选择 div 和 span 元素的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56829468/

相关文章:

html - 发送按钮不起作用

javascript - 如何在 jsGrid 的列中打印原始 HTML 代码?

javascript - 无法显示父 div 中的子节点

jQuery 如果 td 为空则隐藏 block

iphone - 将 HTML 复制到 UIPasteboard

javascript - 将多个表单数据传递给 jquery 函数

javascript - 如何更改垫扩展面板的切换图标?

javascript - js Chrome 扩展的 js 事件(在每个选项卡上工作已加载页面)

javascript - 在 javascript 数组中拍摄图像时不显示 img 标签

Jquery Mobile listview 不使用 json 数据渲染