3

a反復されている現在の要素にタグまたはタグが含まれているかどうかを確認するforループがあり、含まれている場合はformそれらにいくつかの処理を行います。とにかく私はどちらかをチェックすることができます:

var form_or_a_tag = elem[i].getElementsByTagName('a');
var form_or_a_tag = elem[i].getElementsByTagName('form');

しかし、どうすればそれらを組み合わせることができますか?

これらはすべて失敗します:

var form_or_a_tag = elem[i].getElementsByTagName('a form');
var form_or_a_tag = elem[i].getElementsByTagName('a, form');
var form_or_a_tag = elem[i].getElementsByTagName('a') || elem[i].getElementsByTagName('form');

form_or_a_tag基本的に、現在繰り返されている要素に存在するすべてformまたはaタグを変数に格納したいと思います。

4

4 に答える 4

5

を使用できますquerySelectorAll

var form_or_a_tag = elem[i].querySelectorAll('a, form');
于 2013-01-15T22:19:12.923 に答える
5

これはうまくいくかもしれません:

var nodelist_a    = elem[i].getElementsByTagName('a');         // NodeList
var nodelist_form = elem[i].getElementsByTagName('form');      // NodeList

var array_a       = Array.prototype.slice.call(nodelist_a);    // Array
var array_form    = Array.prototype.slice.call(nodelist_form); // Array

var array_both    = array_a.concat(array_form);                // Array

結果はNodeListではなく Arrayになることに注意してください。ただし、各アイテムはNodeです。

于 2013-01-15T22:30:35.583 に答える
0

この関数はこの機能をサポートしているとは思いません。AFAIKでは、getElementsByTagName( "*")ワイルドカードのみを使用してすべてのノードを選択できます。Sizzleのようなライブラリを試してCSSセレクターを使用することができます。

于 2013-01-15T22:22:01.380 に答える
0

ノードのシーケンスが重要な場合は、純粋な Javascript ソリューションを次に示します。

var getNodesInTreeByNodeName = function (node, /*Array of Strings*/ allowed_node_names)
{
    var childCollection = [];
    var getTreeNodes = function (tree_root)
    {
        if (allowed_node_names.indexOf(tree_root.nodeName) > -1)
            childCollection.push(tree_root);
        var childs = tree_root.childNodes;
        if (childs)
            for (var i=0, childs_length=childs.length ; i<childs_length ; i++)
                getTreeNodes(childs[i]);
    };
    getTreeNodes(node);
    return childCollection;
};

使用例:

    var node_types = ["A","FORM"];
    var nodes = getNodesInTreeByNodeName(window.document, wanted_nodes);
于 2013-05-29T21:18:00.393 に答える