getElementsByTagName:如何选择多种类型的标签?

TK1*_*123 3 javascript

我有一个for循环,在其中我检查当前迭代的元素是否有任何a标签或form标签内部,如果是,我做了一些东西给他们.无论如何,我可以检查或者像这样:

var form_or_a_tag = elem[i].getElementsByTagName('a');
var form_or_a_tag = elem[i].getElementsByTagName('form');
Run Code Online (Sandbox Code Playgroud)

但我怎样才能将它们结合起来?

这些都失败了:

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');
Run Code Online (Sandbox Code Playgroud)

基本上我想存储在变量form_or_a_tagall forma标签中,这些标签位于当前正在迭代的元素中.

Roc*_*mat 5

你可以用querySelectorAll.

var form_or_a_tag = elem[i].querySelectorAll('a, form');
Run Code Online (Sandbox Code Playgroud)


Sal*_*n A 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
Run Code Online (Sandbox Code Playgroud)

注意,结果不再是NodeList而是Array; 但每个项目都是一个节点.