1

指定された属性以外の属性を持つすべての要素を見つけるにはどうすればよいですか?例:(href + title + id)を除くその他の属性。

4

2 に答える 2

2
var attrs = ["href", "title", "id"],
    els = document.getElementsByTagName("*"),
    result = Array.prototype.slice.call(els).filter(function(el) {
        if (el.attributes.length === 0)
            return false;

        for (var i = 0, l = attrs.length; i < l; i++) {
            if (el.hasAttribute(attrs[i]))
                return false;
        }
        return true;
    });

console.log(result);
于 2013-01-08T23:41:25.477 に答える
1

これを行う唯一の方法は、ページ内のすべての要素をループして、不要な要素を除外することです。

この実装では、無視する属性の配列(およびオプションでタグタイプ)を渡し、渡した属性以外の属性を持つ要素の配列を返します。

function getElemsWithOtherAttribute(attArray, tags) {
    tags = tags || "*";
    // put all passed in attributes in an object for fast lookup
    // add leading underscore to avoid any built-in property conflicts
    var attLookup = {}, i, j, len, results = [], atts;
    for (i = 0, len = attArray.length; i < len; i++) {
        attLookup["_" + attArray[i].toLowerCase()] = true;
    }
    // get all elements and loop through them all
    var elems = document.getElementsByTagName(tags);
    for (i = 0, len = elems.length; i < len; i++) {
        // get all attributes on this element and loop through them all
        // until we find one that isn't in our attLookup object
        atts = elems[i].attributes;
        for (j = 0; j < atts.length; j++) {
            // if we have an attribute name that is not in our passed in list, then
            // add this element to the results array
            if (attLookup["_" + atts[j].name.toLowerCase()] !== true) {
                results.push(elems[i]);
                break;
            }
        }
    }
    return(results);
}

// example usage
var regAttributes = ["href", "title", "id"];
var items = getElemsWithOtherAttribute(regAttributes, "img");

これは、.attributesコレクションを使用して、特定の要素のHTMLで指定されたすべての属性のリストを取得.nameし、属性ノードのプロパティを調べて、その特定の属性の名前を確認します。

于 2013-01-08T23:39:02.310 に答える