我有一个for循环,我在其中查看迭代的当前元素是否包含任何a
标记或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
标记。
答案 0 :(得分:5)
您可以使用querySelectorAll
。
var form_or_a_tag = elem[i].querySelectorAll('a, form');
答案 1 :(得分: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
答案 2 :(得分:0)
我认为此功能不支持此功能。 AFAIK只能使用getElementsByTagName(“*”)通配符来选择所有节点。您可以尝试使用像Sizzle这样的库来使用CSS选择器。
答案 3 :(得分: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);