ユーザー定義のメソッドを持つ要素があります。要素は、より大きなオブジェクトの一部として作成され、ドキュメントの読み込み時に挿入されます。オブジェクトの要素を直接アドレス指定することで、いつでもそのメソッドを呼び出すことができます。
要素はtabs[0].bubbles[0].element
であり、メソッドは.expand()
(このオブジェクト内には複数の要素があり、それぞれに独自の.expand()メソッドがあります)
だから、ライン
tabs[0].bubbles[0].element.expand();
その要素のメソッドを呼び出します。ただし、特定のイベントが発生すると、次のように要素を選択できる関数が呼び出されます。
bubble = $(this).parent(); // the bubble element is the event handlers parent
ただし、行
bubble.expand();
// or
$(bubble).expand();
// or
$(bubble)[0].expand();
メソッドを呼び出さないでください。
この線
tabs[0].bubbles[0].element.expand();
メソッドを呼び出します。ただし、この行を使用してメソッドを呼び出すことはできません。これは、さまざまな要素が多数あり、関数内から配列の要素のインデックス番号を見つけることができないためです。
正しい要素を選択していないのではないかと思いましたが
($(bubble)[0] === $(tabs[0].bubbles[0].element)[0])
trueを返します(明らかに、これbubble
はに対応する必要がある要素である場合にのみ発生しますtabs[0].bubbles[0].element
)。
tabs[0].bubbles[0].element
$(bubble)[0]
またはと同じではありません$(bubble)[0]
。
JQueryを使用して選択された関数内からメソッドを呼び出すにはどうすればよいですか?
編集
問題は、オブジェクトの作成方法にあると思います。オブジェクトの要素フィールドは、このようなコンストラクターメソッドで作成されます。
this.element = $('<div class="bubble ' + this.type + '">\
<div class="bubbleCentre ' + this.state + ' "> \
<img class="bubbleIcon" src="img/dash/' + this.icon + '"> \
<span class="status">' + text + '</span> \
</div> \
</div>');
.expand()
関数はこのように作成されます。
this.element.expand = function ()
{
// method
alert('method executing');
}
このようなメソッドを呼び出すことができます
tabs[0].bubbles[0].element.expand();
しかし、bubble.get(0).expand();
またはbubble.expand();
何もしません。
ただし、次のようにメソッドを定義すると、次のようになります。
this.element.get(0).expand = function ()
{
// method
alert('method executing');
}
これで、期待どおりにメソッドを呼び出すことができます
bubble.get(0).expand(); // expands bubble as you would expect
メソッドが呼び出されるので、これで十分です。そうするためのもっと簡単な方法があるはずだと思われます。イベントコールバック関数でバブルを選択する場合を除いて、jQueryを関与させる必要がある理由がわかりません。何かご意見は?
が定義されているときに文字列の周りから$()を削除しようとしましたが(メソッドが定義されているときに.element
も削除しました)、どのように試してもメソッドをまったく呼び出すことができませんでした。.get(0)
.expand()