Wait For Elements

given a selector waits for elements to be inserted into the DOM and executes a callback for each match

Version vom 18.12.2014. Aktuellste Version

Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://update.greatest.deepsurf.us/scripts/5679/28656/Wait%20For%20Elements.js

/**
* @param sel - the selector you want to wait for
* @param action - the callback that will be executed when element/s matching the given selector are found, it is passed the array of found elements
* @param stopLooking - if true the function will stop looking for more elements after the first match
*/
function waitForElems(sel, action, stopLooking) {
  var id = 'fke' + Math.floor(Math.random() * 12345);
  function findElem(sel) {
    var found = [].filter.call(document.querySelectorAll(sel), function(elem) {
      return elem.dataset[id] !== 'y';
    });
    if(found.length > 0) {
      found.forEach(function(elem) {
        elem.dataset[id] = 'y';
        action(elem);
      });
      if(stopLooking) {
        clearInterval(tick);
      }
    }
  }
  var tick = setInterval(findElem.bind(null, sel), 300);
  findElem(sel);
  return tick;
}
/**
* @param regex - should match the site you're waiting for
* @param action - the callback that will be executed when a matching url is visited
* @param stopLooking - if true the function will stop waiting for another url match after the first match
*/
function waitForUrl(regex, action, stopLooking) {
  function checkUrl(urlTest) {
    var url = window.location.href;
    if(url !== lastUrl && urlTest(url)) {
      lastUrl = url;
      action();
    }
    if(stopLooking) {
      clearInterval(tick);
    }
    lastUrl = url;
  }
  var urlTest = (typeof regex === 'function' ? regex : regex.test.bind(regex)),
      tick = setInterval(checkUrl.bind(null, urlTest), 300),
      lastUrl;
  checkUrl(urlTest);
  return tick;
}