2009-11-17 45 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匹配“我”,则数倍相对值。