我现在正在学习jQuery,正在阅读Jeffrey Way的一篇文章,"You Still Can’t Create a jQuery Plugin?" 几乎一切都很清楚,但有一些我仍然无法理解。
问题从“第3步:构建插件”开始,标题标题为“For Each ...”,然后是“错误检查”。
this.each(function() {
$this = $(this);
var title = this.title;
if ($this.is('a') && $this.attr('title') != '') {
this.title = '';
$this.hover(function(e){
问题
this.title
- 它的方法是什么?当我们使用jQuery时,我们键入$(this).attr('title')
- 并创建jQuery以简化开发)
this.title
是指DOM规范还是Javascript内置方法?
我完全无法理解this
关键字在这里发生了什么,我们何时必须使用this
和何时$(this)
?为什么我们使用this.each(func
...而不是$(this).each(func
...? (我已经测试了 - 它也有效,但有什么不同?)我知道工厂方法$()
返回一组包装的DOM元素,但为什么我们在这里使用this.title
(和再次$(this).attr('title')
完成这项工作)?
我做了一些测试。我们可以在条件语句中键入this.title
或title
而不是$this.attr('title')
,但只要我们使用任何内容(title
或$(this).attr('title')
)而不是{{1在this.title
语句中 - 它不起作用。
好吧,我们指定了this.title = '';
。但是当我们使用这个变量时,我们为什么要声明它呢?
我认为你们中的一些人比我更了解,理解我需要什么,所以我完成了我的解释) 非常非常感谢,如果你能说清楚的话)
答案 0 :(得分:1)
使用jQuery的attr('title', newVal)
方法,您可以将单个值应用于jQuery选择器中包含的所有元素,但是要更改单个元素,只需操作元素的{{1}即可。直接属性
在title
函数中,each()
参数是要迭代的项目。迭代DOM元素集合时,this
将是一个DOM元素。如果你想在DOM元素上使用jQuery函数,你需要再次将它们包装在jQuery中,这意味着你需要使用this
$(this).doAwesomeness()
可能在嵌套在var title
答案 1 :(得分:0)
正如你自己所说,$()函数返回一组包装的DOM元素,它们为它添加了jquery功能。 $(this).attr('title')不会为this.title交换的原因是因为使用该函数的正确方法是这样的
$(this).attr( 'title', '' );
而不是
$(this).attr( 'title' ) = '';
你不能使用title =''因为title是一个局部变量而不是对属性本身的引用。
答案 2 :(得分:0)
以下等同于jQuery和普通的JS:
var blah = this.title; // is the same as...
var blah = $(this).attr('title');
this.title = 'blah'; // is the same as ...
$(this).attr('title', 'blah');
这是指向触发事件或您正在运行的方法所属的对象的指针,JavaScript中的所有方法都属于某种父对象。
$(object)将jQuery包装器附加到标准对象(允许您访问该对象的所有jQuery方法/ etc)