以下内容如何不起作用(属性值全部为'未定义')
$(".item").wrap('<a href="' + $(this).attr("data-pid") + '.html"></a>');
但这段代码呢?
$('.item').each(function(){
$(this).wrap('<a href="' + $(this).attr("data-pid") + '.html"></a>');
});
由于
答案 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>');
此处this
是window
对象,但没有attr("data-pid")
,因此返回undefined
答案 1 :(得分:2)
这是因为在查找类时调用$(this)
意味着您正在有效地查看对象集合而不是具有attr
属性的单个对象(该集合没有{{1}因为它有一个没有意义。
使用attr
对集合进行迭代意味着您可以访问每个元素并访问其$.each
属性。
答案 2 :(得分:0)
$('.whatever')
中的点表示类名的选择器,但不保证您找到唯一的元素。这意味着您可能会选择一个集合,而不是需要迭代或执行.each()
。
如果您要使用ID,可以试试这个:
$('#whatever')
这是一个基于ID的选择器。只要您的ID安全(只有一个元素具有该ID名称),它应该是安全的。