Подтвердить что ты не робот

Объект jQuery неизменен?

Привет, новый noob на jQuery здесь, и мне было интересно, являются ли объекты jQuery неизменяемыми. Например:

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

Будет ли obj1 и obj2 быть тем же значением obj2 будет ссылаться на obj1?

UPDATE:

В приведенном выше примере вид царапин на поверхности того, что я хочу знать, более точный вопрос: если функция я chain из jQuery api вернет тот же объект или новый (как в случае с строками в Java )?

4b9b3361

Ответ 1

Оба obj1 и obj2 будут ссылкой на объект jQuery, содержащий элемент <tag></tag>, да.

Если вы хотите сохранить ссылку на второй элемент, вы можете вместо этого использовать .appendTo():

var obj1 = $("<p>foo</p>"),
    obj2 = $("<span>bar</span>").appendTo(obj1);

Ответ 2

Да, он obj2 будет ссылаться на obj1. В основном это означает append все, что указано в obj1, и возвращает ссылку.

Вы можете попробовать в console, чтобы obj1 и obj2 имели текст "something"

console.log(obj1);
console.log(obj2);

Ответ 3

Предполагая, что я понял ваш вопрос, да, obj2 будет ссылкой на объект, хранящийся в obj1. Если вы сделаете что-то до obj2:

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

Вы увидите изменения в obj1:

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

Вы можете подтвердить это, проверив два объекта для равенства:

console.log(obj1 == obj2) //true

Ответ 4

http://jsfiddle.net/rLg9S/

Оба объекта возвращают один и тот же элемент, поэтому да.

Ответ 5

Если функция изменяет элементы в выделенном элементе, тогда да, будет создан новый объект.

Например:

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, как правило, означает, что объекты, которые вы закончили, не задерживаются в памяти.

Ответ 6

Вы можете использовать $. clone(), если вам нужна копия объекта.

var obj2 = obj1.clone().append("something");

Ответ 7

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);