jQuery 多个选择器顺序为 "this"

标签 jquery this

“i”和“this”的顺序很重要。第一个,图标添加在按钮后面。第二个,图标添加在按钮之前。这是为什么?

示例1:

$('.btn').click(function(){
    $('i', this).removeClass().addClass("icon-down");
})

示例2:

$('.btn').click(function(){
    $(this, 'i').removeClass().addClass("icon-down");
})

最佳答案

很明显,您使用的这两种形式将产生不同的结果。

$('i', this)

此表单将找到任何<i> this 所指向元素的子元素。它在结构上相当于$(this).find('i')这是我更喜欢的编写方式,因为我认为它更具可读性。

在 jQuery 文档中,此表单被记录为 jQuery( selector [, context ] ) .

<小时/>

您的其他表格:

$(this, 'i')

并不是 jQuery 函数真正直接支持的选项,因为没有记录的选项采用 (element, string) 。我将检查 jQuery 代码,但这很可能只会被解释为 $(element)形式,因此将是 $(this)第二个参数被忽略。此选项记录为 jQuery( element ) 。如果第一个参数是 DOM 元素,则忽略第二个参数。

所以,第一个选项找到子 <i>元素。第二个选项仅作用于按钮本身。

编辑:在查看 jQuery 源代码时,我已经验证了 $(this, 'i')$(this) 的处理方式相同。事实上,这就是 jQuery 函数的操作部分:

init: function( selector, context, rootjQuery ) {
    if ( typeof selector === "string" ) {
        // handle selector string here    
        // ...

    // HANDLE: $(DOMElement)
    } else if ( selector.nodeType ) {
        this.context = this[0] = selector;
        this.length = 1;
        return this;
    }

关于jQuery 多个选择器顺序为 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30249088/

相关文章:

javascript - 当响应非常大时,JQuery ajax 卡住 ui

javascript - 使用 jquery 比较 2 个输入

javascript - 在 jQuery 中多次调用一个函数

javascript - JS - 如何使用 `this`在不同范围内引用同一个对象?

javascript - jQuery:$(this) 与 this.$()

javascript - 在 Javascript 对象中使用 HTML5 音频

javascript - JQuery 打开弹出对话框不起作用

javascript - JQuery 滚动操作重复了结果

javascript - $(this)选择器问题jquery

JavaScript 停止 "this"关键字在函数调用时发生变化?