curryQ-HELPER
isInPage(node):ノードがページに含まれているか?
//CODE
  function isInPage(node) {
    return (node === document.body) ? false : document.body.contains(node);
  }

htmlToNode(ノードエレメントに置換する)

$new.firstElementChildではテキストノードは取得できない、$new.firstChildで補足。$new.firstChildだと親ノードと子ノードの間の改行を取得してしまうので、まずは.firstElementChildで取得、ターゲットがテキストノードで取得できない場合に補足できる


  function htmlToNode(str) {
    if(isNode(str)) return str;
  	if (!str || typeof str !== 'string') return;
  	let $new = document.createElement('div');
  	$new.innerHTML = str;
    return $new.firstElementChild||$new.firstChild;
  };
htmlToNodes(ノードリストに置換する)

  function htmlToNodes(str) {
  	if (!str || typeof str !== 'string') return;
  	let $new = document.createElement('div');
  	$new.innerHTML = str;
    return $new.childNodes;
  };
nodeToHTML(node):html文字列に置換する

テンプレート置換対応が、コードボックスを対象にした時にエラーになりそう


  function nodeToHTML(node) {
  	if (!node || !node.nodeName) return node;
  	let $new = document.createElement('div');
  	$new.appendChild(node);
    let $html = $new.innerHTML;
    $html = $html.replace(/</g, '<').replace(/>/g, '>');
   return $html;
  };
URL置換

//クエリやパラメータを除いたURL
g$.url = function(url) {
  if(!url) url = location.protocol + '//' + location.host + location.pathname;
  return url.split(/[?#]/)[0];
}
//ファイル名.拡張子
g$.file = function(url) {
  if(!url) url = g$.url();
  return url.match(".+/(.+?)([\?#;].*)?$")[1];
}
//ファイル名
g$.filename = function(url) {
  if(!url) url = g$.url();
  return url.match(".+/(.+?)\.[a-z]+([\?#;].*)?$")[1];
}
//.拡張子
g$.filetype = function(url) {
   if(!url) url = g$.url();
   let $file = url.match(".+/(.+?)([\?#;].*)?$")[1];
  return $file.split('.').pop();
}
//aからbを取り除く
g$.reg = function(b) {
  return function(a){
   let regExp = new RegExp(b, "g");
   return a.replace(regExp,"");
  }
}
//ファイル名を含まないURL
g$.dir = function(url) {
  if(!url) url = g$.url();
  return g$.reg(g$.file(url))(g$.url(url));
}
g$.key(obj)(val)||配列の値からkeyを取得

/*  配列の値からkeyを取得 */
g$.key = function(obj) {
 return function(val) {
   const $key = Object.keys(obj).filter((key) => { return obj[key] === val});
   return $key[0];
 }
}
$x$(obj1, obj2): 多次元配列のマージ
$x$(true, obj1, obj2): ディープマージ

var obj1 = {
	sandwich: 'chicken',
	condiment: 'mayo',
	desert: true,
	days: {
		monday: true,
		wednesday: true,
		friday: true
	}
};
var obj2 = {
	sandwich: 'tuna',
	chips: 'Cape Cod',
	desert: false,
	days: {
		monday: false,
		tuesday: true,
		thursday: true
	}
}

//浅いマージ
let $shallow = $x$(obj1, obj2);

//深いマージ
let $deep = $x$(true,obj1, obj2);