2010-06-28 124 views
0

我的JavaScriptjQuery的选择只是第一个

  $(".controls").click(function(event) { 

        var div = $(event.target).parents(".controls"); 

        var a = $(div).find("tr .select"); 


      return false; 
     }); 

和HTML

<div id="grid1" class="controls"> 

    <a href="/projekt/create">Add</a> 
    <a href="/projekt/edit">Edit</a> 

</div> 


<div id="grid2" class="controls"> 

    <a href="/uloha/create">Add</a> 
    <a href="/uloha/edit">Edit</a> 

    <table> 
    <tr id="1"></tr> 
    <tr id="2" class="select"></tr> 
    <tr id="3"></tr> 

    </table> 

</div> 

我想选择具有select类的第一个TR。 我试过

var a = $(div).find("tr:first .select"); 

var a = $(div).find("tr .select:first"); 

,但没有一次成功。

+0

我敢肯定,这可以用一个设计重新思考解决..看起来你是过于复杂的事情。请仔细阐述这个脚本的整体目的? – Jeriko 2010-06-28 15:11:31

+0

您是否希望通过点击#grid1或#grid2触发事件,或者仅在#grid1被点击时触发事件? – 2010-06-28 16:47:49

+0

我想在一个页面上有多个网格。网格div包含一个表格和一个控件div,其中有多个按钮。每个按钮都有其自己的用途(添加,编辑,删除,搜索)。如果有人点击一个按钮,我需要从propriate表中选择所选行。 – user137348 2010-06-29 07:09:15

回答

6

你可以试试这个:

var a = $("tr.select", div).first(); 

var a = $("tr.select:first", div); 

由于有:firstfirst()

要选择内,所有这一切,你使用:

$(this, that) 

会是这样的工作?

$(".controls").click(function(event) { 
    var a = $("tr.select:first", ".controls"); 
    // do stuff with a.... 
    return false; 
}); 

这改变了“两”来不错,但不是“四大”当你按下按钮。

<div class="controls"> 
    <input type="button" value="Click the control" /> 
</div> 
<div id="grid2" class="controls"> 
    <table> 
     <tr id="1"><td>one</td></tr> 
     <tr id="2" class="select"><td>two</td></tr> 
     <tr id="3"><td>three</td></tr> 
     <tr id="4" class="select"><td>four</td></tr> 
    </table> 
</div> 
<script type="text/javascript"> 
    $(".controls input").click(function(event) { 
     var a = $("tr.select:first", ".controls"); 
     $(a).text("okay"); 
     return false; 
    }); 
</script> 

(作为一个方面说明,这些都不是正确的ID名,他们不能启动一个数字,如果你想valide html)

2

如何使用索引?

var a = $(div).find("tr.select")[0] 

/* I think that's the right syntax */ 
+1

问题是要求选择类的tr元素。您的解决方案(tr .select)正在查找具有select类的第一个子元素。 – istruble 2010-06-28 16:34:01

+0

啊,你是对的。更正(删除空间) – Armstrongest 2010-06-30 14:58:51

2

您可以使用first()函数来做到这一点。

var a = $(div).find("tr.select").first(); 
6

我敢肯定,你想要的是这样的:在层次结构

var a = $(div).find("tr.select:first"); 

在jQuery选择,空格分隔水平。

如果我使用了选择器"tr:first .select"它会查找第一个tr并返回所有具有select类的子节点。

如果我使用的选择"tr .select:first"它看起来在每个tr并与选择类各tr返回第一个子元素。

+0

使用$(div).find(“tr.select:first”)的优点/区别是什么? vs $(“tr.select:first”,div); ? – 2010-06-28 17:35:14

+0

@彼得阿杰泰:据我所知,他们做的是完全一样的东西。不过,这将是一个有趣的事情。 – Powerlord 2010-06-28 17:41:21

+0

@R。 Bemrose - 谢谢,那也是我的想法,只是不确定。这将是有趣的,看看。 – 2010-06-28 17:45:09