2017-05-04 61 views
1

我想在数据集上使用观察者。这是我的代码:关于数据集的观察者

HTML:

<div id='my-hidden-content' data-is-collapsed='true'>My hidden content</div> 

的Javascript:

document.getElementById('my-hidden-content').dataset.watch('isCollapsed', function(id, oldval, newval) { 
    console.log('Collapsed changed', id, oldval, newval) 
}); 

我的控制台拿出这个错误:

'Uncaught TypeError: document.getElementById(...).dataset.watch is not a function' 

我怎么会用一个观察者对数据集没有使用任何框架?

*编辑 我尝试构建一个组件,该组件可以实现到每个框架中,并在数据集的值发生更改时向其节点添加类。

+1

如果你要使用好老[表](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/watch)从Netscape倍,你需要Firefox(或者当然,Netscape Navigator)。如果是其他内容,请编辑问题并提供更多详细信息。 –

+0

可以试试@ Eli的['object.watch shim'](http://stackoverflow.com/a/1270182/6224482) – Sandman

+0

@Sandman这就是我试过的。但是数据集是一个DOMStringMap,而defineProperty不是这个对象类型的函数。 –

回答

0

在寻找更好的解决方案后,我发现MutationObserver帮了我很多。

var observer = new MutationObserver(function(mutations) { 
     mutations.forEach(function(mutation) { 
     if (mutation.attributeName === 'data-is-collapsed') { 
      // do something 
     } 
     }); 
    }); 
    observer.observe(document.getElementById('my-hidden-content'), { 
     attributes: true, childList: false, characterData: false 
    });