web-dev-qa-db-ja.com

関数に$(this)を渡すjQuery

次のようなコード行があります。

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

うまくいきます。しかし、これらの行を複数回実行する必要があります。したがって、関数を作成し、関数に$(this)パラメーターを渡しました。

myFunc( $(this) );

function myFunc(thisObj) {
    thisObj.parent().parent().children().each(function(){
        // do something
    });
}

しかし、この方法では、うまくいきませんでした。

46
Sabeti

このリンクを確認できます。

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>
59
erimerturk

jQueryは適切なコンテキストセットで関数を自動的に呼び出します。

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

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

競合なしモード (つまり、グローバルスコープ外)で作業している場合、可能性の1つは次のとおりです。

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);
}
0
Shaun O'Toole