在jQuery上你好了一个新的菜鸟,我想知道jQuery对象是否是不可变的。 例如:
var obj1 = $("<tag></tag>");
var obj2 = obj1.append("something");
obj1和obj2是否相同意味着obj2会引用obj1?
更新:
上面的例子有点划破我想知道的表面,一个更准确的问题是:如果我从jQuery api链接函数将返回相同的对象或新的(如Java中的字符串的情况) )?
答案 0 :(得分:6)
obj1
和obj2
都是对包含<tag></tag>
元素的jQuery对象的引用,是的。
如果您想保留对第二个元素的引用,可以改为使用.appendTo()
:
var obj1 = $("<p>foo</p>"),
obj2 = $("<span>bar</span>").appendTo(obj1);
答案 1 :(得分:3)
是的,obj2
会引用obj1
。它基本上做的是append
给obj1
的任何内容并返回引用。
您可以尝试console
obj1
和obj2
查看文字"something"
console.log(obj1);
console.log(obj2);
答案 2 :(得分:3)
假设我已经理解了您的问题,是的,obj2
将是对obj1
中存储的对象的引用。如果您对obj2
执行了某些操作:
obj2.attr("id", "example");
您会在obj1
:
console.log(obj1) //Will show <tag id="example">something</tag>
您可以通过测试两个对象是否相等来进一步确认:
console.log(obj1 == obj2) //true
答案 3 :(得分:1)
两个对象都返回相同的元素,所以是的。
答案 4 :(得分: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的垃圾收集通常应该意味着你已完成的对象不会在内存中闲逛。
答案 5 :(得分:0)
如果您需要复制对象,可以使用$.clone()。
var obj2 = obj1.clone().append("something");
答案 6 :(得分:0)
var obj1 = $("<p></p>");
var obj2 = obj1.append("something"); // in this is you just assign the `obj1` object to `obj2`
像:
var x = 5;
var y = x; //here, both x and y are 5
因此,obj1
和obj2
会引用相同的内容
证明:
console.log(obj1 === obj2);