J'ai essayé plusieurs façons de filtrer la découverte de nœuds spécifiques dans mon code HTML.JQuery: Recherche/Filtrage sur les attributs dans le contexte
Voici quelques exemples html:
<body>
<div ui:component="component1"></div>
<ul ui:component="component2"></ul>
<article ui:component="component3"></article>
</body>
Je suis en mesure de faire correspondre avec succès des articles en faisant un filtre simple:
// returns div, ul, article
$('[ui\\:component]').each();
Cependant, quand je commence à filtrer en fonction d'un parent nœud, il commence à échouer sur moi. J'ai essayé:
$('[ui\\:component]', $('body')); // returns []
$('body').find('[ui\\:component]'); // returns []
$('body').filter('[ui\\:component]'); // returns []
$('body').find('*').filter('[ui\\:component]'); // returns []
Qu'est-ce que je fais mal ici? Au début, je pensais que cela pourrait être l'espace de noms, mais l'ajouter à la doc html ou le corps ne semble pas faire quelque chose de significatif. Aide a beaucoup apprécié
SOURCE complète ci-dessous:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
</head>
<body>
<div ui:component="component1"></div>
<ul ui:component="component2"></ul>
<article ui:component="component3"></article>
</body>
<script type="text/javascript">
$(document).ready(function() {
// returns div, ul, article
console.log($('[ui\\:component]'));
// these all return nada
console.log($('[ui\\:component]', $('body')));
console.log($('body').find('[ui\\:component]'));
console.log($('body').filter('[ui\\:component]'));
console.log($('body').find('*').filter('[ui\\:component]'));
});
</script>
</html>
REMARQUE: supprimer l'espace de nommage ui: semble le faire fonctionner. Mais je n'aime pas les collisions de noms ....... – ansiart
Lors de l'utilisation de Firefox 3.5, j'ai pu le faire fonctionner en utilisant $ ("body * [ui \\: component]") ', mais je n'ai pas Ne teste pas d'autres navigateurs, donc même si c'est jQuery, je ne sais pas si ça marchera partout. Et bien que je comprenne ne pas vouloir des collisions d'espace de noms, les navigateurs et js ont tendance à ne pas avoir un grand soutien pour les espaces de noms. – Thomas
@Thomas - Ce serait similaire au code '$ ('[ui \\: component]')' qui fonctionnait correctement dans la question. Le sélecteur fonctionne car il utilise 'querySelectorAll 'natif (si disponible) (qui inclurait Firefox 3.5). Mais les '.find()' et '.filter()' ne fonctionnent pas. – user113716