jQueryにないJavaScript頻出イデオム
jQueryにAPIが見当たらないので、いろいろと自作しました。JavaScriptでよくやることだと思うのですが、なんでないんだろう? 確実じゃないからサポートしてないのかな。
要素の属性をすべて列挙する
function attrs_of(element) { if(element instanceof jQuery){ element = element.get(0); } var as = element.attributes; var props = {}; for(var i = 0; i < as.length; i++){ var a = as.item(i); if(a.specified){ props[a.name] = a.value; } } return props; }
jQueryでは、オブジェクトをattrに渡して、一気に要素に属性を設定する方法はあるのに、一気に取得することはできないみたい。
DOM要素がドキュメントに含まれる(作成直後や除去済みでない)か判別
function is_in_document(element){ if(element instanceof jQuery){ element = element.get(0); } var p = element.parentNode; while(p && p != window) { if(p == document){ return true; } p = p.parentNode; } return false; }
もしかしたら、気づいてないだけで、実はjQuery的解決方法があるのかな?
オブジェクトを文字列形式ダンプ
function strdump(v, sharrow){ switch(typeof v){ case 'object': if(sharrow){ return '{...}'; }else{ var props = []; for(var k in v) { props.push(k + ':' + strdump(v[k], true)); } return '{' + props.join(', ') + '}'; } case 'function': return 'function(){...}'; case 'string': v = v.replace(/\\/g, "\\\\").replace(/\"/g, "\\\"").replace(/\n/g, "\\n").replace(/\r/g, "\\r"); return '"' + v.substr(0,30) + (v.length > 30 ? "..." : "") + '"'; default: return String(v); } }
sharrowはブール値だけど、オブジェクトを掘る深さとかでもいいかもしれない。