Javascript 从HTMLDOM中选择不同的标记集

Javascript 从HTMLDOM中选择不同的标记集,javascript,jquery,html,Javascript,Jquery,Html,如何使用jQuery/JS从HTMLDOM获取一组不同的标记 下面是示例DOM HTML -- Head -- META -- TITLE -- H1 -- BODY -- DIV -- DIV -- FORM -- INPUT -- INPUT -- INPUT 那么输出应该是 HTML HEAD META TITLE H1 BODY DIV FORM INPUT 谢谢 iuq您可以使用获取所有元素的节点名称,然后取出

如何使用jQuery/JS从HTMLDOM获取一组不同的标记

下面是示例DOM

HTML  
-- Head  
-- META  
-- TITLE   
-- H1  
-- BODY  
-- DIV 
-- DIV  
-- FORM  
-- INPUT
-- INPUT
-- INPUT
那么输出应该是

HTML  
HEAD  
META  
TITLE  
H1  
BODY  
DIV  
FORM  
INPUT  
谢谢
iuq

您可以使用获取所有元素的节点名称,然后取出重复项:

// Get all tag names
var tags = $("*").map(function() {
   return this.nodeName; 
}).get()
// Filter out the duplicates
.filter(function(value, index, self) {
    return self.indexOf(value) === index;
});
console.log(tags);

如果您根本不需要jQuery,则可以将jQuery的映射替换为,并结合使用:

var tags = Array.prototype.map.call(document.querySelectorAll("*"), function(e) {
   return e.nodeName; 
}).filter(function(value, index, self) {
    return self.indexOf(value) === index;
});
console.log(tags);

香草JS和as功能:

function getDistinctTags() {
    var els = Array.prototype.slice.call(document.querySelectorAll('*'));
    return els.reduce(function (result, el) {
        if (result.indexOf(el.tagName) === -1) {
            result.push(el.tagName);
        }
        return result;
    }, []);
}

通过使用jQuery提供的选择器:。我真的不确定你在这里想要什么答案。我打赌你想要
*
我已经编辑了我的问题,希望它能澄清!这样就不会重复线性搜索:
var name=Object.keys([].reduce.call($(“*”),函数(obj,el){obj[el.tagName]=1;返回obj;},{})感谢您的解决方案+1'd it。