javascript - 返回任何属性以某物开头的所有元素

标签 javascript jquery

我知道 [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">

属性名可以是任何东西,不仅仅是srchref,甚至是非标准属性。

有没有已知的方法来做到这一点?

最佳答案

我将其他答案中的一些想法放在一起并编写了一个自定义选择器。

选择器

$.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'); 

Working Fiddle .

关于javascript - 返回任何属性以某物开头的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21760161/

相关文章:

javascript - 如何将一个字符串分割成n个字符的段?

javascript - 尝试使用 javascript/jQuery 在滚动上添加导航突出显示 - 计算元素高度时出错

javascript - 如何在 JavaScript 中将对象值转换为新数组

javascript - 无法获取输入类型文件的文件

jQuery - 在第 1 节下显示第一段

javascript - 获取 Function.prototype.bind.apply(...) 不是构造函数错误

javascript - Meteor框架免费服务器崩溃

jquery - 为什么 MiniProfiler 会加载 jquery-1.7.1,即使我已经在页面上加载了它?

javascript - 旧输入数组和动态字段 - Laravel - Blade

javascript - 仅从另一个正则表达式中选择大写字母的正则表达式