2015-10-21 28 views
2

我想對local dom執行querySelectorAll聚合物元素。我想這樣做只是:如何在聚合物dart 1.0.0.rc2中的本地dom上執行querySelectorAll?

querySelectorAll("some selector"); 

是不是好主意,因爲所有的mistic陰影/影子dom實現細節。我曾嘗試幾種不同的方式:

var lst = Polymer.dom(root).querySelectorAll(".qtest"); 

給周圍JS數組封裝:

enter image description here

var lst2 = querySelectorAll(".qtest"); 

給出實施ElementList

enter image description here

var lst3 = convertToDart(Polymer.dom(root).querySelectorAll(".qtest")); 

只是簡單元素的List

enter image description here

總之:什麼叫querySelectorAll()返回從local domElementList的正確方法?

+0

我真的不知道這是否會在鏢工作,但你嘗試過使用'this.querySelectorAll()'?據我所知,返回一個節點列表,這可能是你想要的(這裏是一個快速[示例](http://jsbin.com/sakifexidi/edit?html,output)) – Alan

+0

因爲我相信沒有在Dart中調用'this.method()'和'method()'之間的區別。 – kolar

回答

2
Polymer.dom(root).querySelectorAll('some selector'); 

使用此Polymer API可確保即使在使用陰影DOM或陰影DOM填充時也能獲得所需的內容。

又見What are the different ways to look up elements in Polymer 1.0

+0

'Polymer.dom(this).querySelectorAll()'返回'light dom'中的元素,但我需要查詢'local dom'。當然,我可以將'this'改爲'root',但也有其他問題:返回的列表不是'ElementList'類型(例如我可以使用'querySelectorAll()。onClick',但是沒有' Polymer.dom(本).querySelectorAll( '')。onClick')。 – kolar

+1

對不起,我混合了本地和光DOM。這是正確的,這是API的限制。無法在JS中創建ElementList。解決方法是'.forEach((e)=> e.onClick)' –

+0

謝謝。因此,似乎我需要創建自己的'ElementsList'實現,因爲一些存在的pub包(如[dnd](https://pub.dartlang.org/packages/dnd))使用'ElementList'類的成員。 – kolar