我试图通过github.com/wbotelhos/raty建立一个简单的星速渲染功能。 它会将数据属性的“分数”传递给星星。
HTML
<div class="score_show" data-scores="4"></div>
<div class="score_show" data-scores="2"></div>
JS
Method1失败
$('.score_show').raty({ readOnly: true,score: $(this).data('scores')});
方法失败,所以我尝试了另一种方法。
Method2工作
$('.score_show').each(function(){
var score=$(this).data('scores');
$(this).raty({ readOnly: true,score: score});
})
我认为method1中的问题是$(this)并不代表正确的元素。但是有人能给我一个关于method1失败原因的更详细解释吗? 感谢。
答案 0 :(得分:3)
在javascript中,$(this)
仅代表方法调用 - 它调用名为$()
的方法并传递关键字this
引用的对象。
当你在jQuery的上下文中讨论时,$
引用了jQuery库,该方法返回一个jQuery object,它引用了传递的参数引用的dom元素。
在您的情况下,您希望从score_show
对象获取数据得分值...因此,首先您需要获取对这些对象的引用以获取数据值。
在您的第一个示例中,this
可能引用了不同的对象(我们无法在不知道它放置的位置以及如何调用该脚本的情况下对它进行太多说明)
但在第二个示例中,您调用的是$('.score_show')
,它将返回一个jQuery对象,该对象包含类score_show
的所有元素,当您使用.each()时,它会遍历每个元素并调用传递给.each()
的回调方法。在每个回调this
内部引用当前正在迭代的dom元素,因此您可以使用$(this).data('scores')
答案 1 :(得分:1)
在你的情况下,$(this)表示当前循环div对象..你可以使用console.log($(this))来查看它是什么..
答案 2 :(得分:0)
this
通常是指调用当前函数的对象。
在.each()
内,this
表示当前迭代的DOM对象
$(this)
仅用于将DOMElement包装在jQuery对象中,因此您可以在this
上应用jQuery方法。