搜索所有元素中的所有属性

时间:2018-01-08 16:49:19

标签: javascript jquery html

是否有可能搜索每个元素中的每个属性。使用Jquery或javascript

像:

$("[*=attr]").remove();

非常感谢

2 个答案:

答案 0 :(得分:2)

如果问题是"是否有一个选择器我用于此?"答案是"没有。"

如果您可以列出属性,即使它是一个长列表,您也可以使用一组选择器来完成,例如:

$("[data-foo*=attr], [data-bar*=attr], [data-whatever*=attr]").remove();

但如果你的字面意思是任何可以想象的属性名称,不,你就必须自己搜索这些元素。

可以通过使用选择器*来获得一个(可能很大的)jQuery集,其中包含所有元素,然后{{1}通过浏览每个元素的DOM attributes list来获取。

但我认为如果是我,我会使用递归访问者:



filter

// Convenient utility to find if any entry in
// an array-like structure matches
var some = Function.prototype.call.bind(Array.prototype.some);

// Callback for checking if an attribute matches
function attrMatch(attr) {
  return attr.value.indexOf("attr") != -1;
}

// Walk this element and its children
function walk(element) {
  var child, next;
  // Remove this one?
  if (some(element.attributes, attrMatch)) {
    // Yes
    element.parentNode.removeChild(element);
    return;
  }
  // No, walk its children
  for (child = element.firstElementChild;
       child;
       child = next) {
    next = child.nextElementSibling;
    walk(child);
  }
}

// After a brief pause, start walking at document.body
setTimeout(function() {
  walk(document.body);
}, 800);




这是为了清晰而不是简洁而写的,没有jQuery作为jQuery对这个特定任务没有多大帮助。可以轻松地jQuery-it-up。例如:



<div>
  <div data-foo="blah attr blah">delete me</div>
  <div data-bar="nope">
    <span class="attr">delete me too, remember class is an attribute</span>
    <span data-whatever="blarg attr">delete me too</span>
    <span>don't remove me</span>
  </div>
  <span data-foo="no match">nor me</span>
</div>
&#13;
// Convenient utility to find if any entry in
// an array-like structure matches
var some = Function.prototype.call.bind(Array.prototype.some);

// Callback for checking if an attribute matches
function attrMatch(attr) {
  return attr.value.indexOf("attr") != -1;
}

// Walk this element and its children
function walk(element) {
  // Remove this one?
  if (some(element.attributes, attrMatch)) {
    // Yes
    $(element).remove();
    return;
  }
  // No, walk its children
  $(element).children().each(function() {
    walk(this);
  });
}

// After a brief pause, start walking at document.body
setTimeout(function() {
  walk(document.body);
}, 800);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我弄明白,在网上合并了一些想法之后,这就是解决方案:

               $("*").each(function() {
                    var ks=$(this);
                    $.each(this.attributes,function(i,a){
                        if (a.value== "exemple"){
                            $(ks).remove(); //or anything else
                        }
                    })
                })

我希望这将有助于未来的人们,非常感谢您的贡献。