每个jQuery - 将(this)与类规范相结合

时间:2012-03-31 00:54:33

标签: jquery class this each

我正在尝试循环一些表格行。简化的行如下:

<table>
  <tr id="ucf48">
    <td class="ucf_text">
      <input name="ucf_t48" value="Ann becomes very involved in the text she is reading." type="text">
    </td>
  </tr>
  <tr id="ucf351">
    <td class="ucf_text">
      <input name="ucf_t351" value="Ann is a fast and confident reader." type="text">
    </td>
  </tr>
</table>

我正在使用此代码循环:

$('#ucf tr').each(function(i,obj){
    var cn=$(this).attr('id').substr(3);
    var t=$(this +'.ucf_text input').val();

    console.log("Row "+i);
    console.log("Cnum: "+cn);
    console.log(t);
});

控制台输出是:

Row 0
Cnum: 48
Ann becomes very involved in the text she is reading.
Row 1
Cnum: 351
Ann becomes very involved in the text she is reading.

现在有人给我发火焰之前,我知道我可以通过使用'name'来引用我想要的数据来做到这一点。但是,为什么我的cnum变量遵循'this'但t变量不是?

感谢。

5 个答案:

答案 0 :(得分:8)

当你这样做时:

var t=$(this +'.ucf_text input').val();

this未正确转换为字符串。

尝试:

var t=$(this).find('.ucf_text input').val();

答案 1 :(得分:3)

var t=$(this +'.ucf_text input').val();

您正在尝试将字符串与DOM节点连接起来。 我想你想要每一行的孩子?这将是:
var t=$(this).find('.ucf_text input').val();

答案 2 :(得分:3)

实际上,这是因为$(this) [tr]没有班级.ucf_text

我认为你的意思是它下面的td

添加空格以表示您的意思是孩子。 :)

var t=$(this +' .ucf_text input').val();
               ^ Space!

修改 或者不是!

var t=$(this).children('.ucf_text').children('input').val();

查找方式更酷,但我正在编辑,为了不留下错误的答案,并希望有点原创,除此之外......也许你需要一个独特的输入路径?

答案 3 :(得分:3)

您无法连接DOM对象和字符串。

您可以通过将this指定为选择器的上下文来轻松解决此问题:

var t = $('.ucf_text input', this).val();

通过这样做,选择器只匹配给定上下文中的元素,即你的情况下的表行。

答案 4 :(得分:3)

你已经得到了2个正确的答案,但只是为了多样性,这是另一种方法:

var t = $('.ucf_text input', this).val();