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

标签 javascript jquery

我正在尝试修改 $('#some_id') 生成的对象,一切似乎都工作正常,但是当我询问修改后的对象时,它根本没有任何变化。

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

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

最佳答案

因为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 引用) code>) 添加数据/方法(这使得数据可用于所有 jQuery 集合,过去、现在和 future ):

    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
    

关于javascript - 是否可以修改 jquery 对象并检索修改后的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28417051/

相关文章:

javascript - 在Javascript中遍历DOM(nodeType)

Javascript 单元测试 - 使用 Jasmine 监视自调用函数

JavaScript 未捕获引用错误 : ListMgr is not defined

javascript - 用于可拖动页面元素的 css 框架和用于服务器端位置保存的回调

javascript - jQuery:选择所有不具有特定类的子元素

javascript - Splice 删除多个索引

jQuery:选择具有相同类的彼此相邻的2个元素

javascript - 为什么这个 while 循环会记录一个数字?

javascript - Pjax 不起作用,重新加载整个页面

javascript - 我如何确保模块等到它们的依赖项加载到 require.js 中?