2010-02-08 102 views
1

我试图通过名称在<p>中选择一个<div>,但它返回0个结果。相同类型的选择适用于<input><span>,但不适用于<select><div>。下面的代码演示了我的意思:jquery查找div或按名称选择返回0结果

<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> 

底部附加的痕迹读取(在Firefox 3.5.6):

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

他们都应该阅读1.什么我缺少什么?

+0

您应该选择短划线('-')**或**下划线('_')作为单词分隔符,因为两者似乎都使您感到困惑。 – 2010-02-08 17:00:10

回答

4

你在代码里面有一个破折号而不是下划线。 (或者在“select”元素名称中使用下划线而不是短划线;其中一个或另一个:-)

另外,div元素不能具有name属性,我不这么认为。使用“id”并用“#whatever”选择。

+0

我不认为我在逻辑层面上与下划线混合了。我的问题是在不能使用的情况下使用name属性。我的目标是动态生成HTML元素,并且我发现了一个相当有趣的方法:在HTML中使用隐藏模板,按实例复制它,并提取/删除ID并将它们用作键来引用实例元素。 – 2010-02-09 22:40:38

+0

在你发布的示例代码中,select元素具有“tl_type”的“名称”属性,但是在代码中,您在该调用中查找“select [name = tl-type]”来查找。第一个是下划线,第二个是短划线。 – Pointy 2010-02-09 23:21:54