2012-08-06 40 views
0

我發現自己處於一種情況,我得到了一個N​​odeList,我試圖放入要操作的jQuery對象中。問題是該數組還包括文本節點,註釋節點等,似乎混淆jQuery時,你只是說$(nodeList)來自NodeLists的javascript條形文本節點

我用下劃線進行快速clean功能剝離出來的DOM元素,並返回它們作爲一個數組:

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

與此$(_(nodeList).clean())給了我一個可用的jQuery對象。

有沒有更好的方法來解決這個問題?

謝謝。

+0

什麼是下劃線? – jfriend00 2012-08-06 03:21:50

+0

@ jfriend00它是underscore.js(http://underscorejs.org)的一部分。另外,OP,請嘗試http://codereview.stackexchange.com/ – Polyov 2012-08-06 03:25:34

+0

這是一個下劃線問題或jQuery問題? OP在這個問題中引用了jQuery,但是都包含在標籤中。 – jfriend00 2012-08-06 03:48:44

回答

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有一個內部函數來完成這種類型的操作,但我不知道任何內置的公共方法。

+0

謝謝。把它放在jQuery中可能會更好,但我的問題是:不jQuery已經這樣做了嗎?我的小2線功能似乎非常簡單。這真的是最好的方法嗎? – nicholas 2012-08-06 06:14:40

+0

@nicholas - 允許jQuery對象包含非元素,並且一些jQuery方法可以做到這一點。我沒有意識到內置jQuery方法需要一個'nodeList'並將其過濾到'elementList',儘管許多內部函數都會自己進行過濾,因爲大多數jQuery函數只返回元素,但是大量的DOM迭代迭代所有節點,而不僅僅是元素。如果你已經有一個'nodeList',我不知道有更好的方法來做你在jQuery中所要求的。 – jfriend00 2012-08-06 06:23:32

+0

@nicholas - 我應該補充說,如果你做了一個普通的jQuery選擇器操作,它將只返回元素(在內部做它自己的過濾)。但是,你說你從一個'nodeList'開始,而不是一個選擇器操作,這不是通常使用jQuery的方式,這可能是爲什麼它不會自動進行過濾。 – jfriend00 2012-08-06 06:27:11

0

如何簡單:jQuery(nodelist).filter('*')

這將濾除一切,但元素節點只使用vanilla jQuery。