2009-11-17 4 views
0

J'essaie de filtrer les métadonnées de relations XFN trouvées dans les pages Web. Il est quelque chose comme ceci:Analyse des données XFN avec Jquery

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

en REL vous pouvez avoir différentes valeurs, comme « ami », « collegue » mais même « moi » et « rencontré » parce que vous pouvez avoir plusieurs valeurs, Je l'ai fait :

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

Mais cela ne fonctionne pas, car "moi" et "rencontré" sont appariés! Existe-t-il un moyen de filtrer les valeurs exactement, même lorsqu'il existe plusieurs valeurs?

Merci.

S'il vous plaît noter que je n'ai aucun contrôle sur la page, en fait je travaille sur une extension Chrome, et ce code devrait fonctionner sur n'importe quelle page Web.

Répondre

0

Vous pouvez utiliser le sélecteur [attribute~=value]. Il sélectionne en fonction des valeurs séparées par des espaces exactement comme le fonctionnement des classes xfn et CSS, c'est-à-dire [class~=className] est exactement le même que .className. Je ne pouvais pas le trouver dans la documentation de jQuery, mais cela fonctionne dans au moins 1,3.

+0

Incroyable! Merci beaucoup, cela fonctionne vraiment malgré le fait qu'il manque dans la documentation de jQuery. – Omiod

+0

Woah! Très sympa. Je ne savais pas que jQuery pouvait faire ça. En espérant que ça en fasse les docs pour 1.4 –

0

Puisque vous utilisez jQuery, vous pouvez le faire de cette façon:

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

qui trouve essentiellement toutes les a éléments qui pourrait être un match, puis les filtres en divisant la balise rel dans un tableau et en vérifiant la correspondance réelle est trouvée.

Modifier: J'ai mis à jour mon code de !$.inArray à $.inArray > -1 trouvé par @UVL.

+0

Merci beaucoup, votre code m'a montré le chemin à suivre, mais a trouvé que ne correspond qu'à une partie des valeurs, car inarray renvoie l'index de l'élément trouvé, et négativement (!) Il renvoie des valeurs incorrectes. Va poster le code correct ci-dessous. – Omiod

+0

Merci UVL, j'ai mis à jour mon code aussi bien. –

0

Une solution (jusqu'à jquery 1.2 au moins) est la suivante:

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

Puts dans xfn_me le nombre de A balises avec "moi" rel correspondant, même lorsque plusieurs valeurs rel sont utilisées.