Javascript 返回所有属性以某物开头的元素

Javascript 返回所有属性以某物开头的元素,javascript,jquery,Javascript,Jquery,我知道[name^=“value”]但是有没有类似的选择器(或技术)可以查询以给定值开始的所有属性 我正在寻找类似$(“[*^=”的东西http://www.something.com“]”(不存在) 它会将至少包含一个属性的所有元素与以http://www.something.com 说: 属性名称可以是任何内容,而不仅仅是src和href,甚至是非标准属性 有没有一种已知的方法可以做到这一点?如果您想为img、a和link标签做到这一点,那么您可以这样做: var ref = '"htt

我知道
[name^=“value”]
但是有没有类似的选择器(或技术)可以查询以给定值开始的所有属性

我正在寻找类似
$(“[*^=”的东西http://www.something.com“]”
(不存在)

它会将至少包含一个属性的所有元素与以
http://www.something.com

说:


属性名称可以是任何内容,而不仅仅是
src
href
,甚至是非标准属性


有没有一种已知的方法可以做到这一点?

如果您想为img、a和link标签做到这一点,那么您可以这样做:

var ref = '"http://www.something.com"';
var elems = [].slice.call(document.querySelectorAll('img[src='+ref+'], a[href='+ref+'], link[href='+ref+']'));
//do something with the elems array
如果你想走另一条路

让我伤心的代码(查询眼前的一切、循环中的循环、循环中的正则表达式等):

var rx=/(^http:\/\/www.something.com)/;
var=function(){
对于(var j=0,leng=attrs.length;j
提醒所有属性和值…
自定义此代码…

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

选择器

我认为这需要迭代整个DOM,并迭代每个元素的属性集合。如果您愿意,我可以用JavaScript编写它,然后您可以将它作为选择器扩展添加到jQuery?不过,它不会被执行。看一个粗略的想法。你到底为什么需要这样做?当然有更好的解决方案。这样的东西不应该存在,没有它的使用案例。您需要选择两个完整的属性,并且您只对三种类型的标记感兴趣,因此,不要通过检查每个元素的每个属性来粗暴化DOM,只需针对您真正关心的属性编写三个查询并使用它们:
img[src]$=http://whatever],链接[href]$=http://whatever],a[href]$=http://whatever]
。要想检查每个元素的每个属性,你需要拿出一个更好的现实理由,根本没有理由这样做。danronmoon,修复了。null和crush,谢谢!其他人,我有我的理由和一个用例,有无限可能的属性,例如
数据-*
性能不是问题,我喜欢残酷对待DOM:d.谢谢rjreed,你的“讨厌”当然欢迎。我想您的针对的正则表达式实现也将能够压缩一些更好的性能,如果我能找到一种聪明的方法,只创建一次正则表达式,并在每次调用选择器时将其保持在范围内,我将更新我的答案,使之更像您的:)。感谢您回答Eskandari,我完全忘记了
规范ified
property.oh!没问题!Jquery是一种很棒的语言:)我
load()
通过Ajax,但是
submit()
事件或
on('submit',…)
不适用于此。但它在不使用ajax加载时可以工作!!!您知道这是什么问题吗???谢谢!Eskandari,问个问题并将链接发送给我,我一定会看一看。
var ref = '"http://www.something.com"';
var elems = [].slice.call(document.querySelectorAll('img[src='+ref+'], a[href='+ref+'], link[href='+ref+']'));
//do something with the elems array
var rx = /(^http:\/\/www.something.com)/;
var loopAgain = function () {
    for (var j = 0, leng = attrs.length; j < leng; j++) {
        if (rx.test(attrs[j].value)) {
            return true;
        }
        return false;
    }
};
var allTheThings = [].slice.call(document.querySelectorAll('*'));
for (var i = 0, len = allTheThings.length; i < len; i++) {
    var attrs = allTheThings[i].attributes;
    if (loopAgain()) {
        console.log(allTheThings[i]);
    }
}
function strstr (haystack, needle, bool) {
  var pos = 0;

  haystack += '';
  pos = haystack.indexOf(needle);
  if (pos == -1) {
    return false;
  } else {
    if (bool) {
      return haystack.substr(0, pos);
    } else {
      return haystack.slice(pos);
    }
  }
}
    $( document ).ready(function(){
    $('*').each(function() {
      $.each(this.attributes, function() {
        // this.attributes is not a plain object, but an array
        // of attribute nodes, which contain both the name and value
        if(this.specified) {
          if( strstr(this.value,'http://') )
            alert(this.name+'+'+this.value);
        }
      });
    });

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