Created
October 27, 2015 23:07
-
-
Save xcv58/bc79253dc2b4e74b8318 to your computer and use it in GitHub Desktop.
MutationObserver
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function(win){ | |
| 'use strict'; | |
| var listeners = [], | |
| doc = win.document, | |
| MutationObserver = win.MutationObserver || win.WebKitMutationObserver, | |
| observer; | |
| function ready(selector, fn){ | |
| // Store the selector and callback to be monitored | |
| listeners.push({ | |
| selector: selector, | |
| fn: fn | |
| }); | |
| if(!observer){ | |
| // Watch for changes in the document | |
| observer = new MutationObserver(check); | |
| observer.observe(doc.documentElement, { | |
| childList: true, | |
| subtree: true | |
| }); | |
| } | |
| // Check if the element is currently in the DOM | |
| check(); | |
| } | |
| function check(){ | |
| // Check the DOM for elements matching a stored selector | |
| for(var i = 0, len = listeners.length, listener, elements; i < len; i++){ | |
| listener = listeners[i]; | |
| // Query for elements matching the specified selector | |
| elements = doc.querySelectorAll(listener.selector); | |
| for(var j = 0, jLen = elements.length, element; j < jLen; j++){ | |
| element = elements[j]; | |
| // Make sure the callback isn't invoked with the | |
| // same element more than once | |
| if(!element.ready){ | |
| element.ready = true; | |
| // Invoke the callback with the element | |
| listener.fn.call(element, element); | |
| } | |
| } | |
| } | |
| } | |
| // Expose `ready` | |
| win.ready = ready; | |
| })(this); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment