2017-05-04 127 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 
    });