在函数中使用jQuery这个对象

时间:2014-03-04 14:23:39

标签: jquery html5 dom

以下内容如何不起作用(属性值全部为'未定义')

$(".item").wrap('<a href="' + $(this).attr("data-pid") + '.html"></a>');

但这段代码呢?

$('.item').each(function(){
    $(this).wrap('<a href="' + $(this).attr("data-pid") + '.html"></a>');
});

由于

3 个答案:

答案 0 :(得分:2)

$('.item').each(function(){
    $(this).wrap('<a href="' + $(this).attr("data-pid") + '.html"></a>');
});

this引用每个功能块中的当前元素


更好的代码版本

$('.item').wrap(function () {
    return '<a href="' + $(this).data("pid") + '.html"></a>';
});

$(".item").wrap('<a href="' + $(this).attr("data-pid") + '.html"></a>');

此处thiswindow对象,但没有attr("data-pid"),因此返回undefined

答案 1 :(得分:2)

这是因为在查找类时调用$(this)意味着您正在有效地查看对象集合而不是具有attr属性的单个对象(该集合没有{{1}因为它有一个没有意义。

使用attr对集合进行迭代意味着您可以访问每个元素并访问其$.each属性。

答案 2 :(得分:0)

$('.whatever')中的点表示类名的选择器,但不保证您找到唯一的元素。这意味着您可能会选择一个集合,而不是需要迭代或执行.each()

如果您要使用ID,可以试试这个:

$('#whatever')

这是一个基于ID的选择器。只要您的ID安全(只有一个元素具有该ID名称),它应该是安全的。