我试图修改$('#some_id')产生的对象,一切似乎都运行正常,但是当我回复我修改过的对象时,它根本没有任何变化。
$('#log_container').log
undefined
$('#log_container').log = {}
Object {}
$('#log_container').log
undefined
为什么$('#log_container').log
是undefined
而不是我在上一行中明确指定的内容?
答案 0 :(得分:1)
因为jQuery('some-selector')
每次调用它都会返回一个新对象:
function whatHappens(selector) {
return {
magic: 'here'
}
}
whatHappens('when').log // undefined
var result = whatHappens('when');
result.log = {};
var result2 = whatHappens('when');
result === result2 // false
result.log // {}
result2.log // undefined
如果您需要在对象上始终可以使用某些数据,您可以:
使用data
方法设置DOM节点上的数据:
$('#log_container').data('log', {});
$('#log_container').data('log');
存储对jQuery集合的引用:
var $logContainer = $('#log_container');
$logContainer.log = {};
$logContainer.log; // {}
更新返回的jQuery集合的[[Prototype]]
(jQuery.prototype
,通常由其别名jQuery.fn
引用)以添加数据/方法(这使数据可用于< em>所有 jQuery集合,过去,现在和将来):
jQuery.fn.log = function yourLoggingMethod() {
// Available on all jQuery collections now
// Shared state - don't put things like {} or []
// on here unless you intend to have a mutable "global".
};
然后您可以正常创建集合:
var $logContainer = $('#log_container');
$logContainer.log // function yourLoggingMethod
答案 1 :(得分:0)
每次运行$('#log_container')
时,都会创建一个新的jQuery对象。
如果你想出于某种原因(你可能不应该这样做)具体修改jquery对象;还有更好的选择),将它分配给一个变量;然后修改并使用该变量;
var test = $('#log_container');
test.log = {};
console.log(test.log);