javascript从NodeLists中剥离文本节点

时间:2012-08-06 03:11:40

标签: jquery dom underscore.js textnode

我发现自己处于一种情况,我得到了一个N​​odeList,我试图将其放入一个jQuery对象中进行操作。问题是数组还包括文本节点,注释节点等,当你只说$(nodeList)时,似乎会混淆jQuery。

我使用下划线来制作一个快速clean函数,它可以去除DOM元素并将它们作为数组返回:

_.mixin({
    clean: function(nodeList) {
        return _(nodeList).filter(function(node) {
            return node.nodeType == 1;
        });
    }
});

使用此$(_(nodeList).clean())为我提供了一个可用的jQuery对象。

还有更好的方法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

我真的不确定你问的是什么问题,但这是一个有效的jQuery实现,可以从jQuery对象中过滤掉非元素:

jQuery.fn.clean = function() {
    return this.filter(function() {
        return(this.nodeType == 1);
    });
}

var nodes = document.getElementById("container").childNodes;
var $elements = jQuery(nodes).clean();

并且,一个有效的演示:http://jsfiddle.net/jfriend00/RV6H7/

jQuery有一个执行此类操作的内部函数,但我不知道有任何内置的公共方法。

答案 1 :(得分:0)

简单地说:jQuery( nodelist ).filter( '*' )

除了v​​anilla jQuery之外,这将除掉除了元素节点之外的所有内容。