11

こんにちは、jQuery の初心者です。jQuery オブジェクトが不変であるかどうか疑問に思っていました。例えば:

var obj1 = $("<tag></tag>");
var obj2 = obj1.append("something");

obj1 と obj2 は同じ意味で、obj2 は obj1 を参照しますか?

アップデート:

上記の例は、私が知りたいことの表面を引っかいたようなものですが、より正確な質問は次のとおりです。jQuery API から関数をチェーンすると、同じオブジェクトまたは新しいオブジェクトが返されますか (Java の文字列の場合と同様)?

4

7 に答える 7

6

obj1との両方が、はい、要素obj2を含む jQuery オブジェクトへの参照になります。<tag></tag>

2 番目の要素への参照を保持したい場合は、.appendTo()代わりに次を使用できます。

var obj1 = $("<p>foo</p>"),
    obj2 = $("<span>bar</span>").appendTo(obj1);
于 2011-11-16T09:33:50.580 に答える
3

はい、obj2参照しobj1ます。それが基本的に行うことは、参照appendを与えてobj1返すことです。

あなたはそれを見て、テキストを持っているかもconsoleしれませobj1obj2"something"

console.log(obj1);
console.log(obj2);
于 2011-11-16T09:33:44.510 に答える
3

あなたの質問を理解したと仮定すると、はい、obj2に格納されているオブジェクトへの参照になりますobj1。何かをする場合obj2

obj2.attr("id", "example");

次の変更が表示されobj1ます。

console.log(obj1) //Will show <tag id="example">something</tag>

2 つのオブジェクトが等しいかどうかをテストすることで、これをさらに確認できます。

console.log(obj1 == obj2) //true
于 2011-11-16T09:34:26.443 に答える
1

関数が選択されている要素を変更した場合、はい、新しいオブジェクトが作成されます。

例えば:

var link = $('#myLink'),
    span = link.find('span');

linkとは別のオブジェクトspanです。ただし、元のオブジェクトは実際には失われません。end基本的に操作操作をロールバックするメソッドを使用すると、非常に簡単に元に戻すことができます。

$('#myLink')
    .find('span') // get the span elements
        .css('color', '#fff')  // modify them
    .end() // go back to the original selection
    .css('font-size', '24px'); // modify that

そのため、 を使用しないチェイン セレクション コールがend非常に多数ある場合、非常に大きなオブジェクトになる可能性があります (オブジェクトを作成したオブジェクトを参照するオブジェクトのチェインが存在するため)。ただし、これは非常に厄介な設計になるため、そうする可能性は低いですが、Javascript のガベージ コレクションは通常、処理を終えたオブジェクトがメモリ内に留まらないことを意味するはずです。

于 2011-11-16T11:22:09.183 に答える
1

http://jsfiddle.net/rLg9S/

どちらのオブジェクトも同じ要素を返すので、はい。

于 2011-11-16T09:32:54.823 に答える
0

オブジェクトのコピーが必要な場合は、$.clone()を使用できます。

var obj2 = obj1.clone().append("something");
于 2011-11-16T09:36:20.553 に答える