airheadの日記: bookmarklet: コメントへの返信の、表示/非表示ボタン
日記 by
airhead
/.のコメントでオフトピックを延々と続けている枝があると、読み手がそれを読み飛ばそうとしても、読み手は延々とスクロールしなければならない。これは時間や表示領域の無駄遣いだし、思考も妨げられる。
/.のHTMLソースをのぞいてみると、あるコメントに付けられていた返信は階層ごとにUL要素でまとめられている(親コメントがなく、記事自体に付けられた最上階層のコメントは除く)。このUL要素に表示/非表示ボタンをつければ便利ではないかと考えた。既に誰か書いているものかもしれないが、web検索で見つかったツリー表示実現スクリプトを参考に、/.用のbookmarkletにしてみた。
すべてのUL要素にボタンをつけるとうっとうしいので、子要素としてTABLE要素を持っているUL要素を対象にした。ボタンの位置が微妙な気もするが、機能的には充分。既にボタンがつけられているかについてはチェックしてないので、実行した数だけボタンが生成されて間抜けだが、まあそれも良しとしよう。仕様。Firefoxで実行させたところボタンが小さくてポイントしにくいので、ボタンのスタイルを指定してちょっと大きめにした。
FirefoxとOperaでは機能したが、IEおよびSleipnirでは機能しない。なんで?
javascript: function toggleSwitch(btn) { btn.value = (btn.value == "-") ? "+" : "-"; btn.nextSibling.style.display = (btn.value == "-") ? "block" : "none"; } for (var i=0; i<document.getElementsByTagName("UL").length; i++) { obj = document.getElementsByTagName("UL")[i]; if (obj.getElementsByTagName("TABLE").length) { btn = document.createElement("INPUT"); btn.type = "button"; btn.value = "-"; btn.onclick = new Function('toggleSwitch(this)'); btn.style.padding = "0em 0.2em"; obj.parentNode.insertBefore(btn,obj); } } focus();
複数行に分けて書くと次のとおり。
javascript:
function toggleSwitch(btn) {
btn.value = (btn.value == "-") ? "+" : "-";
btn.nextSibling.style.display = (btn.value == "-") ? "block" : "none";
}
for (var i=0; i<document.getElementsByTagName("UL").length; i++) {
obj = document.getElementsByTagName("UL")[i];
if (obj.getElementsByTagName("TABLE").length) {
btn = document.createElement("INPUT");
btn.type = "button";
btn.value = "-";
btn.onclick = new Function('toggleSwitch(this)');
btn.style.padding = "0em 0.2em";
obj.parentNode.insertBefore(btn,obj);
}
}
focus();
/.のHTMLソースをのぞいてみると、あるコメントに付けられていた返信は階層ごとにUL要素でまとめられている(親コメントがなく、記事自体に付けられた最上階層のコメントは除く)。このUL要素に表示/非表示ボタンをつければ便利ではないかと考えた。既に誰か書いているものかもしれないが、web検索で見つかったツリー表示実現スクリプトを参考に、/.用のbookmarkletにしてみた。
すべてのUL要素にボタンをつけるとうっとうしいので、子要素としてTABLE要素を持っているUL要素を対象にした。ボタンの位置が微妙な気もするが、機能的には充分。既にボタンがつけられているかについてはチェックしてないので、実行した数だけボタンが生成されて間抜けだが、まあそれも良しとしよう。仕様。Firefoxで実行させたところボタンが小さくてポイントしにくいので、ボタンのスタイルを指定してちょっと大きめにした。
FirefoxとOperaでは機能したが、IEおよびSleipnirでは機能しない。なんで?
javascript: function toggleSwitch(btn) { btn.value = (btn.value == "-") ? "+" : "-"; btn.nextSibling.style.display = (btn.value == "-") ? "block" : "none"; } for (var i=0; i<document.getElementsByTagName("UL").length; i++) { obj = document.getElementsByTagName("UL")[i]; if (obj.getElementsByTagName("TABLE").length) { btn = document.createElement("INPUT"); btn.type = "button"; btn.value = "-"; btn.onclick = new Function('toggleSwitch(this)'); btn.style.padding = "0em 0.2em"; obj.parentNode.insertBefore(btn,obj); } } focus();
複数行に分けて書くと次のとおり。
javascript:
function toggleSwitch(btn) {
btn.value = (btn.value == "-") ? "+" : "-";
btn.nextSibling.style.display = (btn.value == "-") ? "block" : "none";
}
for (var i=0; i<document.getElementsByTagName("UL").length; i++) {
obj = document.getElementsByTagName("UL")[i];
if (obj.getElementsByTagName("TABLE").length) {
btn = document.createElement("INPUT");
btn.type = "button";
btn.value = "-";
btn.onclick = new Function('toggleSwitch(this)');
btn.style.padding = "0em 0.2em";
obj.parentNode.insertBefore(btn,obj);
}
}
focus();
bookmarklet: コメントへの返信の、表示/非表示ボタン More ログイン