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);