jQuery将$(this)传递给函数

59

我有这样的一段代码:

$(this).parent().parent().children().each(function(){
    // do something
});

它运行良好。但我需要多次运行这些行。 因此,我创建了一个函数并将$(this)参数传递给该函数:

myFunc( $(this) );

function myFunc(thisObj) {
    thisObj.parent().parent().children().each(function(){
        // do something
    });
}
但是用这种方式,它没有起作用。

1
如果您使用“this”而不是“$(this)”作为参数,会发生什么? - Rob
2
你的代码本身没有问题,所以我建议错误可能出现在其他地方。你说的“它没起作用”是什么意思? - Tim Rogers
我使用了 "this",但它也无效。当我在 Firebug 中看到 $this 和 thisObj 时,它显示为:{$this = input.focus},但 {thisObj = [input.focus]} ... 是否有任何区别? - Vahid
@Natasha,你解决了这个问题吗? - simple guy
4个回答

84
您可以查看此链接。
http://jsfiddle.net/zEXrq/38/

$("#f").click(function() {
  myFunc($(this));
})

function myFunc(thisObj) {
  thisObj.parent().parent().children().each(function() {
    alert("childs")
  });
}
<div id="wordlist">
  <div id="a"></div>
  <div id="b">
    <div id="e"></div>
    <div id="f">child</div>
  </div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>


17

jQuery将自动使用正确的上下文调用您的函数。

$('#button').on('click', myFunction);

function myFunction() {
    var that = $(this);
    console.log(that);
}

2
如果您在无冲突模式(即在全局范围之外)工作,其中一种可能性是:
jQuery.noConflict();

(function ($) {
    $('#button').on('click', myFunction);
}(jQuery));

// or
jQuery('#button').on('click', myFunction);

function myFunction() {
    var that = jQuery(this);
    console.log(that);
}

-1

你可以将ID传递给函数,然后在函数内部使用循环。

myFunc(this.id);

function myFunc(thisid) {
    $("#" + thisid).parent().parent().children().each(function(){
        // do something
    });
}

通常我会在函数外部进行循环,像下面这样:

$(this).parent().parent().children().each(function(){
    myFunc(this.id)
});

function myFunc(thisid) {

    // do something example
   $("#" + thisid).html("Yay, i changed the html for element: " + thisid);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接