2017-10-05 75 views
1

假设我有一个网站,并且想要使用循环其DOM元素的脚本并指出这些元素的属性包含指定文本的一部分。我设法创建了一个简单的循环来查找DOM元素的每个所需属性并从中创建数组。现在,我想将我的数组属性值与它所属的DOM元素配对,并且还能够找出与数组元素(属性)和DOM元素匹配的指定部分文本。用香草的属性找到DOM元素的一部分Javascript

var getAll = document.getElementsByTagName('*'); 
var myArray = []; 

for (var i=0; i<getAll.length; i++) { 
    getHref = getAll[i].getAttribute('href'); 
    if (getHref !== null) { 
    myArray.push(getHref); 
    } 
} 

我不知道如何链接我的属性与DOM元素。我试图使用indexOf('')来查找部分文本,但它不起作用,因为它在数组中查找完整的字符串。有人会这么好,帮助我吗?我不想使用任何框架。

回答

0

现在我要配对的DOM元素我的数组属性值,它 属于,也能找出文本中指定的部分是 数组元素(属性)和DOM元素相匹配。

为什么不干脆让只有那些匹配使用元素包含选择

var getAll = document.querySelectorAll("[href*='text-to-be-matched']"); 

这是一个NodeList,你可以用迭代for循环和索引什么的DOM元素,你已经发现。

var attributeValToDOMMap = {}; 
getAll.forEach(function(element){ 
    var hrefVal = element.getAttribute("href"); 
    attributeValToDOMMap[ hrefVal ] = attributeValToDOMMap[ hrefVal ] || []; //in case one href value is common with multiple DOM elements 
    attributeValToDOMMap[ hrefVal ].push(element); 
}); 
+0

这太棒了。非常感谢! – panxpiotr

0

你想过滤一些文本的href属性?

您可以使用.indexOf(),我没有看到原因。

或者你可以在开始时改进选择器(但已经提出)。

这里是显示1行代码添加到您的小提琴,以过滤一些出现在href中的子字符串。

fiddle