如何选择仅具有特定属性的元素?

Posted

技术标签:

【中文标题】如何选择仅具有特定属性的元素?【英文标题】:How can I select an element with specific attributes only? 【发布时间】:2019-09-29 15:02:54 【问题描述】:

我需要根据颜色选择将 src 粘贴到图像中。

这是我的标记:

<div data-img="[black-blue.png]" black blue></div>
<div data-img="[black.png]"  black></div>
<div data-img="[blue.png]"  blue></div>
<div data-img="[orange.png]"  orange></div>
<div data-img="[black-blue-orange.png]" black blue orange></div>
<div data-img="[blue-orange.png]" blue orange></div>
<div data-img="[blue-red-orange.png]" blue red orange></div>

我的脚本适用于元素属性:

var attributes = '';
for(var i = 0; i<activeColorsArray.length; i++ )
   attributes += '['+activeColorsArray[i]+']';

输出:[blue][black],例如。它适用于黑色和蓝色项目,但它也可以捕捉黑色和蓝色和橙色元素。

[blue][black]:not([orange]) 不适合我,因为我有 8 种颜色...

只需要这样的选择器。

【问题讨论】:

【参考方案1】:

一个想法是考虑元素具有的属性数量。如果您只想定位blueblack,那么您只能定位具有3 个属性的元素(包括您的情况下的data-img

activeColorsArray= ['blue','black'];

var attributes = '';
for(var i = 0; i<activeColorsArray.length; i++ )
   attributes += '['+activeColorsArray[i]+']';


var elements = document.querySelectorAll(attributes);
var items = Array.from(elements);

elements = items.filter((e) => 
 return e.attributes.length == 3;
)

for(var i=0;i<elements.length;i++) 
  elements[i].style.color="red";
<div data-img="[black-blue.png]" black blue>black blue</div>
<div data-img="[black.png]"  black>black</div>
<div data-img="[blue.png]"  blue>blue</div>
<div data-img="[orange.png]"  orange>orange</div>
<div data-img="[black-blue-orange.png]" black blue orange>black blue orange</div>
<div data-img="[blue-orange.png]" blue orange>blue orange</div>
<div data-img="[blue-red-orange.png]" blue red orange>blue red orange</div>

【讨论】:

【参考方案2】:

如果那是您的确切标记,CSS 属性选择器将在没有任何 javascript 的情况下工作。此代码将仅匹配具有 data-img 属性且值恰好为 [black-blue.png] 的 div。由于您描述的确切原因,不建议尝试通过裸属性 (div[black][blue] ) 进行选择。

div[data-img="[black-blue.png]"] 
    color: red;
<div data-img="[black-blue.png]" black blue>black blue</div>
<div data-img="[black.png]"  black>black</div>
<div data-img="[blue.png]"  blue>blue</div>
<div data-img="[orange.png]"  orange>orange</div>
<div data-img="[black-blue-orange.png]" black blue orange>black blue orange</div>
<div data-img="[blue-orange.png]" blue orange>blue orange</div>
<div data-img="[blue-red-orange.png]" blue red orange>blue red orange</div>

https://jsfiddle.net/nk98tch1/

【讨论】:

非常感谢您的帮助。它对我不起作用。我不知道一开始会选择哪种颜色。我有 8 种颜色可供选择。

以上是关于如何选择仅具有特定属性的元素?的主要内容,如果未能解决你的问题,请参考以下文章

我有一个基于所选城市长度不同的对象数组。如何选择包含具有特定属性的对象的元素?

从 jsonb 数组包含具有特定属性的元素的表中选择

如何选择包含具有特定src属性的img子元素的父元素

具有特定属性名称和值的 Scrapy .css 选择元素

选择具有特定背景颜色的元素

SimpleXML:选择具有特定属性值的元素