奇怪的jQuery .prev()行为

时间:2011-10-30 20:12:31

标签: jquery

我有简单的HTML代码:

<input type='hidden' name='cat_id' value='123'/>
<a href='#' class='edit'>Edit</a>
<a href='#' class='delete delete-link'>Delete</a>

简单的JS代码:

$("a.delete-link").click(function() {
var id = $(this).prev($('input[name="cat_id"]')).val();
    alert(id);
});

简单明了的一切,获取名为'cat_id'的先前输入值。但它只返回一个空字符串(值确实是定义的)。我想也许选择器错了:

var id = $(this).prev($('input[name="cat_id"]')).length;
alert(id);

退货1.工作。 我只是不知道发生了什么,并尝试了

var id = $(this).prev($('input[name="cat_id"]')).attr('name');
alert(id);

返回'undefined'。奇怪。有任何想法吗?试过prevAll而不是prev,效果是一样的。 jQuery版本是1.6.4

2 个答案:

答案 0 :(得分:3)

$("a.delete-link").click(function() {
var id = $(this).prev('input[name="cat_id"]').val();
    alert(id);
});

.prev()

您应该将选择器表达式(字符串)传递给.prev()方法而不是jQuery对象。

答案 1 :(得分:2)

prev方法采用选择器,而不是jQuery对象:

var id = $(this).prev('input[name="cat_id"]').val();

然而,在这种情况下,这对你没有帮助。由于选择器与前一个元素(编辑链接)不匹配,您将获得一个空的jQuery对象,val将不会返回该ID。

您可以使用siblingsprevAll方法查找元素:

var id = $(this).siblings('input[name="cat_id"]').val();