jquery - 如何仅获取具有相同文本的元素的第一次出现

标签 jquery html css

我编写了一段 jQuery 代码,它仅显示具有相同文本的标题标记的第一次出现。

下面是 jQuery 代码:

$("h1").each(function(){
   $("h1:contains('"+$(this).text()+"')").first().css('display','block');
});

Fiddle 中的当前 HTML :

<h1>heading1</h1>
<p>hello</p>
<h1>heading1</h1>
<p>hello</p>
<h1>heading2</h1>
<p>hello</p>
<h1>heading2</h1>
<p>hello</p>
<h1>heading1</h1>
<p>hello</p>
<h1>heading3</h1>
<p>hello</p>
<h1>heading3</h1>
<p>hello</p>

用于隐藏所有的 CSS h1 s 开头:

h1{
    display:none;
}
<小时/>

当前.each()如果我可以得到 <h1> 的第一次出现,即使只需要 3 次迭代,循环也会迭代 7 次在当前 fiddle 中具有相同文本的标签:- <h1>heading1</h1> , <h1>heading2</h1> , <h1>heading3</h1> .

我可以编写一个条件来检查上一个 h1文本当前 h1 text 如果相同的文本标题是一个接一个的。但是您可以在 HTML 中看到第三个 <h1>heading1</h1> 出现在 <h1>heading2</h1> 之后 在这种情况下,条件将不起作用。

那么有没有一种方法可以让我获得相同的输出,并根据需要进行精确的迭代次数,并且获得比当前代码更高效的代码?

最佳答案

您可以通过忽略可见的来优化它,

$("h1").each(function(){
   if($(this).is(':visible')) { return; }
   $("h1:contains('"+$(this).text()+"')").first().css('display','block');
});

DEMO

更新版本,

$("h1").each(function (i) {
    if ($(this).data('validated') === '1') {
        return;
    }
    $("h1:contains('" + $(this).text() + "')").data('validated','1').first().show();
});

DEMO I

您可以在 here 上看到更新后的性能测试

关于jquery - 如何仅获取具有相同文本的元素的第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22854835/

相关文章:

jQuery - 获取单选或文本输入的值

javascript - jquery lavalamp 风格在 codepen 上工作,但在 jsfiddle 上不工作

jquery - 在 IE 请求中设置 AJAX 内容类型 header

css - 如果我的表里面有一个表,它们的边框会折叠吗?

javascript - 如何根据多个数据属性过滤搜索结果

html - IE认为float initial是float left?

jquery - 根据屏幕分辨率更改img src路径

html - 如何使用 CSS 旋转四列?

html - 如何防止切换复选框元素与另一个元素重叠?

javascript - 如何防止快速鼠标移动在我的绘图应用程序中打断一条线?