2009-09-18 7 views
0

J'utilise jQuery 1.3.2 et j'essaie de sélectionner des éléments dans un élément svg DOM.jQuery ne sélectionne pas l'objet lineargradient

$('svg > defs > lineargradient') 

Cependant, pour une raison quelconque, il ne le sélectionner, je ne sais que je peux accéder à d'autres éléments dans le < svg élément > depuis que je l'ai récupéré avec succès un $ (« svg> rect »).

Mon SVG DOM ressemble à ceci:

<svg width="975" height="385"> 
    <defs> 
     <lineargradient id="raphael-gradient-0" x1="1.000" y1="1.000" x2="0.000" y2="0.000"> 
      <stop offset="0%" stop-color="#242b62"/><stop offset="9.090909090909092%" stop-color="#174a88"/> 
      <stop offset="18.181818181818183%" stop-color="#0e60a3"/><stop offset="27.272727272727273%" stop-color="#0b66ab"/> 
      <stop offset="36.36363636363637%" stop-color="#0870b7"/> 
     ... 
     </lineargradient> 
     <lineargradient id="raphael-gradient-1" x1="1.000" y1="1.000" x2="0.000" y2="0.000">...</lineargradient> 

    </defs> 
    <circle cx="50" cy="40" r="10" fill="#ff0000" stroke="#000" transform=""/> 
    <rect x="0" y="0" width="975" height="385" fill="url(#raphael-gradient-1)" stroke="none" transform="" style="opacity: 1;" opacity="1" fill-opacity="1"/> 
</svg> 

Y at-il des raisons pour lesquelles jQuery 1.3.2 ne serait pas en mesure de choisir les éléments <linearGradient>?

Répondre

1
alert($('svg lineargradient').length); 

Working Demo

EDIT:

Il semble que l'expression enfant immédiat > ne fonctionne pas, mais si vous spécifiez un sélecteur sans que cela (si possible), il est très bien dans Firefox (mais pas IE). Ce qui suit fonctionne dans IE cependant (testé dans IE7)

alert($('lineargradient').length); 

De toute évidence, cela va sélectionner les éléments <lineargradient> que vous voulez sur une page un peu plus difficile, mais les commandes comme slice() et eq() vous permettra de les obtenir par position dans l'ensemble enveloppé. L'écriture de vos propres filtres pour le moteur de sélection Sizzle peut donner les résultats souhaités.

+0

Hmm drôle, ça n'a pas l'air de marcher dans Internet Explorer. – leeand00

+0

Il dit que le nombre de "gradients linéaires est de 0" sur IE8. – leeand00

+0

@ leeand00 - C'est deux fois dans la semaine dernière que j'ai été pris en défaut en ne testant pas sur IE (ont tendance à utiliser Firefox). C'est à voir avec le moteur Sizzle Selector que jQuery utilise. –