Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
<div class="outer">
  <div class="inner">
    
  </div>
</div>
</body>
</html>
 
var dom = {};
dom.rand = function(min, max) {
    if(max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    } else {
        return Math.floor(Math.random() * (min + 1));
    }
};
dom.trim = function(str) {
    return str.replace(/^\s+|\s+$/g, '');
};
dom.hasClass = function(node, klass) {
    var newClasses = (node.className).replace(/\s+/g, ' ');
    return (' ' + newClasses + ' ').indexOf(' ' + klass + ' ') > -1;
};
dom.addClass = function(node, klass) {
    if (!node.className) {
        node.className = klass;
    } else if (!this.hasClass(node, klass)) {
        node.className += ' ' + klass;
    }
};
dom.removeClass = function(node, klass) {
    if (node.className && dom.hasClass(node, klass)) {
        var newClasses = node.className.replace(new RegExp('(\\s+|^)' + klass + '(\\s+|$)', 'g'), ' ');
        node.className = this.trim(newClasses);
    }
};
dom.toggleClass = function(node, klass) {
    if (dom.hasClass(node, klass)) {
        dom.removeClass(node, klass);
    } else {
        dom.addClass(node, klass);
    }
};
dom.partSelector = function(selector) {
  return selector.split(/\s+/);
};
dom.findClasses = function(selector) {
  return selector.match(/\.[a-zA-Z\-\_]+/gi);
};
dom.findId = function(selector) {
  var id = new RegExp(/\#([a-zA-Z\-\_]+)/i).exec(selector);
  if (id != null) {
    return new RegExp(/\#([a-zA-Z\-\_]+)/i).exec(selector)[0];
  } 
};
dom.findTagName = function(selector) {
  var tag = new RegExp(/^[^\#\.][a-zA-Z\-\_]+(\.|\#)/).exec(selector);
  if (tag != null) {
    return tag[0].match(/[a-zA-Z]+/)[0];
  }
}
dom.parseSelector = function(selector) {
  var parts,
      cases = [],
      partSelector,
      selectors = this.partSelector(selector);
  
  for (var i = 0; i < selectors.length; i++) {
    cases[i] = {};
    parts = cases[i];
    partSelector = selectors[i];
    
    if (new RegExp(/\.|\#/).test(partSelector)) {
      parts.classes = this.findClasses(partSelector);
      parts.id = this.findId(partSelector);
      parts.tagName = dom.findTagName(partSelector);      
    } else if (new RegExp(/[a-zA-Z]+/).test(partSelector)) {
      parts.tagName = partSelector;
      parts.id = undefined;
      parts.classes = undefined;
    }
  }
  
  return cases;
};
dom.find = function(selector, context) {
  var selectors = selector.split(/\s+/);
  
  var cases = this.parseSelector(selector);
  
  console.log(cases);
};
dom.find('.parent#some-id div.child', document.body);
dom.find('.some-class.some-other-class', document.body);
dom.find('#element', document.body);
dom.find('div', document.body);
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
fxslokerpro
0viewers