2009-11-17 55 views
0

我試圖過濾在網頁中找到的XFN關係元數據。 它是這樣的:用Jquery解析XFN數據

<a href="site" rel="friend colleague" >Name</a> 

在REL你可以有不同的值,如「朋友」,「collegue」但即使是「我」和「滿足」 ,因爲你可以有多個值,我這樣做:

xfn_me = $("a[rel*=me]").length; 

但是這不起作用,因爲「me」和「met」都匹配! 即使存在多個值,是否有方法可以精確地過濾值?

謝謝。

請注意,我無法控制頁面,實際上我正在使用Chrome擴展程序,並且此代碼應該可以在任何網頁上運行。

回答

0

您可以使用[attribute~=value]選擇器。它根據空間分隔值精確選擇xfn和CSS類的工作方式,即[class~=className].className完全相同。

xfn_me = $("a[rel~=me]").length; 

我在jQuery文檔中找不到它,但它至少在1.3版本中可用。

+0

令人驚歎!非常感謝,儘管它在jQuery文檔中缺失,但它確實有效。 – Omiod 2009-11-17 22:29:58

+0

哇!很酷。我不知道jQuery可以做到這一點。希望它能夠成爲1.4的文檔 – 2009-11-18 23:58:59

0

由於您使用jQuery,你可以這樣來做:

$('a[rel*=me]').filter(function(){ 
    return $.inArray('me', $(this).attr('rel').split(' ')) > -1; 
}).length; 

,基本上查找所有a元素可能是一場比賽,然後由相對標籤分成一個過濾它們數組並檢查實際匹配是否被找到。

編輯:我將代碼從!$.inArray更新爲$.inArray > -1,發現者是@UVL。

+0

非常感謝,您的代碼向我展示了遵循的途徑,但發現只匹配部分值,因爲inarray返回找到的項目的索引,並且否定(!)它會返回不正確的值。 要發佈下面的正確代碼。 – Omiod 2009-11-17 21:15:20

+0

謝謝UVL,我也更新了我的代碼。 – 2009-11-17 21:35:36

0

溶液(直至jquery的1.2至少)是這樣的:

xfn_me = $('a[rel*=me]').filter(function(){ 
return $.inArray('me', $(this).attr('rel').split(' ')) > -1; 
}).length; 

放入xfn_me即使當使用的A標籤與rel匹配「我」,則數倍相對值。