是否可以修改jquery对象并检索修改后的对象

时间:2015-02-09 18:48:35

标签: javascript jquery

我试图修改$('#some_id')产生的对象,一切似乎都运行正常,但是当我回复我修改过的对象时,它根本没有任何变化。

$('#log_container').log
undefined
$('#log_container').log = {}
Object {}
$('#log_container').log
undefined

为什么$('#log_container').logundefined而不是我在上一行中明确指定的内容?

2 个答案:

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