2010-02-08 4 views
1

J'essaie de sélectionner un <div> à l'intérieur d'un <p> par son nom, mais il retourne 0 résultats. Le même type de sélection fonctionne correctement pour <input> et <span>, mais pas pour <select> et <div>. Le code ci-dessous montre ce que je veux dire:jquery trouver div ou sélectionner par nom retournant 0 résultats

<html> 
<head> 
<script type="text/javascript" src="jquery-1.4.1.min.js"></script> 
</head> 
<body> 
    <p id="foo"> 
     <input type="text" name="tl-label" /> 
     <select name="tl_type"> 
      <option value="select_type">Select type</option> 
      <option value="field">Field</option> 
      <option value="text">Text label</option> 
      <option value="flag_set">Flag set</option> 
     </select> 
     <span name="manip-links"> 
      <a name="move_up" href="#">[move up]</a> 
      <a name="move_down" href="#">[move down]</a> 
      <a name="delete" href="#">[delete]</a> 
     </span> 
     <div name="field-params"> 
      field params 
     </div> 
     <div name="text-params"> 
      text params 
     </div> 
     <div name="flag-set-params"> 
      flag set params 
     </div> 
    </p> 
</body> 
<script type="text/javascript" language="JavaScript"> 
<!-- 
    var foo = $('#foo'); 
    foo.tl_label = foo.find('input[name=tl-label]'); 
    foo.tl_type = foo.find('select[name=tl-type]'); 
    foo.manip_links = foo.find('span[name=manip-links]'); 
    foo.field_params = foo.find('div[name=field-params]'); 
    foo.text_params = foo.find('div[name=text-params]'); 
    foo.flag_set_params = foo.find('div[name=flag-set-params]'); 

    $('body').append('<p>' + 
     'tl_label: ' + foo.tl_label.size() + '<br/>' + 
     'tl_type: ' + foo.tl_type.size() + '<br/>' + 
     'manip_links: ' + foo.manip_links.size() + '<br/>' + 
     'field_params: ' + foo.field_params.size() + '<br/>' + 
     'text_params: ' + foo.text_params.size() + '<br/>' + 
     'flag_set_params: ' + foo.flag_set_params.size() + '<br/>' + 
     '</p>'); 
//--> 
</script> 
</html> 

Les traces annexées au fond lu (dans Firefox 3.5.6):

tl_label: 1
tl_type: 0
manip_links: 1
field_params : 0
text_params: 0
flag_set_params: 0

Ils devraient tous lire 1. Qu'est-ce que je manque?

+0

Vous devriez probablement choisir soit tiret ('-') ** ou ** soulignement (' _') comme un séparateur de mots que l'utilisation des deux semble vous avoir confondu. –

Répondre

4

Vous avez un tiret au lieu d'un trait de soulignement dans votre code à l'intérieur des noms. (Ou un trait de soulignement au lieu d'un tiret dans le nom de l'élément "select", l'un ou l'autre :-)

Aussi, les éléments div ne peuvent pas avoir un attribut de nom, je ne pense pas. Utilisez "id" et sélectionnez avec "#whatever".

+0

Je ne crois pas que j'ai un tiret par rapport à un underscore mélangé au niveau logique. Mon problème était en utilisant l'attribut name où il ne peut pas être utilisé. Mon but était de générer dynamiquement des éléments HTML, et j'ai trouvé une façon plutôt intéressante de le faire: utiliser un modèle caché en HTML, le copier par instance, extraire/supprimer des identifiants et les utiliser comme des clés pour faire référence aux éléments d'instance. –

+0

Bien dans l'exemple de code que vous avez posté, l'élément select a un attribut "name" de "tl_type", mais dans votre code, vous recherchez "select [name = tl-type]" dans cet appel à "find". Un trait de soulignement dans le premier, et un tiret dans le second. – Pointy