我看過questions of similar title,但它們不完全一樣。YUI第一個孩子的節點匹配給定的選擇器
首先,我使用YUI(與Liferay 6.0兼容的3.2.0)。
我已經有Node
參考。我的目標是獲得匹配給定CSS選擇器的第一個孩子Node
。起初,我是這樣做的:
...
parse: function(node) {
var title = node.one('>span, >div, >a, >h1');
...
},
...
這個工程在Firefox,Chrome和IE 9+以上。但是,我們必須支持IE 8,所以我挖掘並瞭解W3C的參考說明:
A child selector is made up of two or more selectors separated by ">"
這似乎表明,按照規範,需要家長,即使在似乎並非如此。所以我尋找多一點,看到的jQuery實際上提到了這個特定的情況下被棄用:
我找不到這種情況下,YUI文檔中明確提到,但我還是不要不認爲使用它是安全的(並且它在IE8中不受支持)。我嘗試了一堆東西,包括使用*>span, *>div, ...
,*:first-child+span, ...
,但他們沒有工作。所以我離開了我用的是:
var title = node.get('children').filter('>span, >div, >a, >h1').item(0);
但這似乎不雅,效率低下,因爲它背後的代碼將有大量的循環(因爲過濾器不會短路,所有我想要的是第一場比賽)。任何人有更好的建議?
[選擇器級別3](http://www.w3.org/TR/css3-selectors)對語法有更清晰的描述;作爲組合子的子選擇器需要在每邊都有一個選擇器,以便說「這是一個孩子」,因此是「兩個或更多」位。選擇器庫使用當前非標準的語法。然而,[選擇器API 2](http://www.w3.org/TR/selectors-api2/#relative-selector-string)正在尋找允許在選擇器字符串開頭的組合器,將其稱爲相對選擇器串。 – BoltClock
@BoltClock,很好的參考。任何想法哪些瀏覽器支持哪些選擇器級別?一個快速谷歌似乎並沒有太大的變化...... – Lucas
@BoltClock,事實證明,IE8的確工作,你的鏈接到Selectors API迫使我再次確認。 [這是jsFiddle](http://jsfiddle.net/GJTAZ/6/)。如果你想寫點東西,我會很高興給你答案。 – Lucas