青空文庫のルビを消す
TL;DR
以下ブックマークレットを実行すればよい
code:js
javascript:(()=>{Array.from(document.querySelectorAll("rt")).forEach(e => e.parentNode.removeChild(e));})();
/icons/hr.icon
思う所あって引用したくなった
就職活動の過程でコードを書く機会が薄れゆくうち,いつの間にか意識ばかりが肥大して「虎」になっている自分に気づいたわけである
TLにそういう話が回ってきた
普通にコピペしたらルビも含めて貼り付けられて鬱陶しかったので消すことを試みた
こうなる(打ち消し線は筆者付加)
己は詩によって名を成そうと思いながら、進んで師に就いたり、求めて詩友と交って切磋琢磨せっさたくまに努めたりすることをしなかった。かといって、又、己は俗物の間に伍ごすることも潔いさぎよしとしなかった。共に、我が臆病な自尊心と、尊大な羞恥心との所為せいである。
HTMLの構造はこうなっている
code:html
求めて詩友と交って
<ruby>
<rb>切磋琢磨</rb>
<rp>(</rp>
<rt>せっさたくま</rt>
<rp>)</rp>
</ruby>
に努めたりすることをしなかった。
とりあえずrt要素だけ消せばコピペできるようなので,そのようにする
rp要素はそのままでも支障ないらしい
もちろんruby要素ごと消せばよりキレイになるとは思う
コードを書いてみた
code:js
document.querySelectorAll("rt").forEach(e => e.parentNode.removeChild(e));
大体のブラウザはこれで行けるはずだが,なんとIEはNodeListへのforEachに対応していないらしい
https://gyazo.com/f13d71bcebe761937663ea7d1bb543dd
適当に考えたもの
code:js
let e = document.querySelectorAll("rt");
for(let i = 0; i < e.length; i++){
ei.parentNode.removeChild(ei); }
どうやらNodeListからArrayに変換するほうが筋が良いらしい
さすがのIEでもArrayには forEachメソッドがある
.querySelectorAll()にはよく知られた問題が2つあります。1つ目は、結果に対してNodeオブジェクトのメソッドを呼び 出し、各要素にまとめて処理を適用する方法(jQueryオブジェクトで使い慣れているような方法)が使えないことです。代わりに、各要素に対する処理を1つ1つ繰り返さなければなりません。2つ目は、戻り値がArrayではなくNodeListであることです。つまり、通常のArrayメソッドを直接使えません。NodeListには.forEachなど類似の方法がいくつかありますが、どのバージョンのIEも依然として.forEachをサポートしていません。従って、最初にリストを配列に変換するか、これらのメソッドをArrayのプロトタイプから「借りる」必要があります。
code:js
Array.from(document.querySelectorAll("rt")).forEach(e => e.parentNode.removeChild(e));
ということで無事に引用ができた
己は詩によって名を成そうと思いながら、進んで師に就いたり、求めて詩友と交って切磋琢磨に努めたりすることをしなかった。かといって、又、己は俗物の間に伍することも潔しとしなかった。共に、我が臆病な自尊心と、尊大な羞恥心との所為である。
ちなみにサイト提供側からルビをコピーさせない方法はいくつかあるらしい
OnCopyされたときにdisplay: none;