gpt4 book ai didi

javascript - 查找具有相同属性值的元素的最快方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:33 25 4
gpt4 key购买 nike

我正在解析一些带有 url 作为 ID 的 div,如果存在相同的 url/ID,我想绕过它。因此,在每次追加时,我都会搜索 100 个 div,以找到所有这些 div 都具有的相同属性值。

例子:

HTML:

<div data-id="http://stackoverflow.com"></div>
<div data-id="http://engadget.com"></div>
<div data-id="http://9gag.com"></div>
<div data-id="http://reddit.com"></div>
<div data-id="http://facebook.com"></div>
<div data-id="http://stackoverflow.com"></div>
<div data-id="http://twitter.com"></div>
<div data-id="http://mashable.com"></div>

所以如果stackoverflow存在,绕过:

$('div[data-id="http://www.stackoverflow"]').length

使用纯 js 最快的方法是什么?

编辑:

所以在尝试之后它比我想象的更复杂:

由于我必须先 append 内容,然后查找具有特定值属性的 data-id 是否存在两次,因此我在整个过程中努力争取尽可能快的方法。

这是我的 HTML:

<div class="ele" data-id="http://stackoverflow.com">http://stackoverflow.com</div>
<div class="ele" data-id="http://engadget.com">http://engadget.com</div>
<div class="ele" data-id="http://9gag.com">http://9gag.com</div>
<div class="ele" data-id="http://reddit.com">http://reddit.com</div>
<div class="ele" data-id="http://facebook.com">http://facebook.com</div>
<div class="ele" data-id="http://stackoverflow.com">http://stackoverflow.com</div>
<div class="ele" data-id="http://twitter.com">http://twitter.com</div>
<div class="ele" data-id="http://mashable.com">http://mashable.com</div>
<div class="ele" data-id="http://bbc.com">http://bbc.com</div>
<div class="ele" data-id="http://twitter.ca">http://twitter.ca</div>
<div class="ele" data-id="http://google.com">http://google.com</div>
<div class="ele" data-id="http://apple.com">http://apple.com</div>
<div class="ele" data-id="http://cnn.com">http://cnn.com</div>
<div class="ele" data-id="http://imgur.com">http://imgur.com</div>
<div class="ele" data-id="http://9gag.com">http://9gag.com</div>

这是我的js:

var a = document.getElementsByClassName("ele")
for (i=0;i<a.length;i++) {
var b = a[i].getAttribute("data-id");
if (document.querySelectorAll('div[data-id="' + b +'"]').length > 1){
console.log(a[i])
}
}

这将输出:

<div class="ele" data-id="http://stackoverflow.com">http://stackoverflow.com</div>
<div class="ele" data-id="http://9gag.com">http://9gag.com</div>
<div class="ele" data-id="http://stackoverflow.com">http://stackoverflow.com</div>
<div class="ele" data-id="http://stackoverflow.com">http://stackoverflow.com</div>
<div class="ele" data-id="http://9gag.com">http://9gag.com</div>

其中 9gag.com 和 stackoverflow.com 都出现了两次以上。

我如何只留下 1 个并移除其余的?这是实现此目标的最快方法吗?

最佳答案

document.querySelectorAll('div[data-id="http://www.stackoverflow"]').length;

var a = document.getElementsByClassName("ele")
for (i=0;i<a.length;i++) {
var b = a[i].getAttribute("data-id");
var all = document.querySelectorAll('div[data-id="' + b +'"]');
for (var j = 1; j < all.length; j++){//if there is more than 1 match remove the rest
all[j].parentNode.removeChild(all[j]);
}
}

http://jsfiddle.net/ehMML/

关于javascript - 查找具有相同属性值的元素的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17393188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com