我知道 [name^="value"]
selector但是是否有类似的选择器(或技术)查询以给定值开头的所有属性?
我正在寻找类似 $("[*^='http://www.something.com']")
的内容(不存在)。
它将匹配所有包含至少一个属性的值以 http://www.something.com
开头的所有元素。
说:
<img src="http://www.something.com/image.jpg" />
<a href="http://www.something.com">Something</a>
<link rel="stylesheet" href="http://www.something.com/css/style.css" type="text/css">
属性名可以是任何东西,不仅仅是src
和href
,甚至是非标准属性。
有没有已知的方法来做到这一点?
最佳答案
我将其他答案中的一些想法放在一起并编写了一个自定义选择器。
选择器
$.expr[':'].hasAttrStartingWithValue = function (obj, index, meta) {
var startsWithAttrValue = false;
var value = meta[3];
for (var i = 0; i < obj.attributes.length; i++) {
var attr = obj.attributes[i];
// attr.value starts with value
if (attr.specified && attr.value.lastIndexOf(value, 0) === 0) {
startsWithAttrValue = true;
break;
}
}
return startsWithAttrValue;
};
它还没有经过适当的交叉浏览和正确性测试,我确信它可以进一步优化,但它似乎与 IE 11、FF 24 和 Chrome 32 兼容。
用法
// Logs every occurrence of a value in any attribute of the page
$(":hasAttrStartingWithValue('http://www.something.com')").each(function (i, e) {
console.log(i + " - " + e.outerHTML);
});
// Matches only children of test
$("#test :hasAttrStartingWithValue('http://www.something.com')")
.css('background-color', 'red');
关于javascript - 返回任何属性以某物开头的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21760161/