m2

選択文字列を取得

Opera 10.50 で document.selection が使えなくなったので window.getSelection も使うように書いてみました。

alert(
(function f(w){
  var d=w.document,q,t,i=0,r=d.selection,s=r&&(r.createRange()||i).text;
  if(!r){
    s=w.getSelection()+'',q=s||d.querySelectorAll('input,textarea');
    while(!s&&(t=q[i++]))s=t.value.slice(t.selectionStart,t.selectionEnd)
  }
  i=0;
  while(!s&&(t=w[i++]))try{s=f(t)}catch(e){}
  return s||'';
})(this)
)

bookmarklet:

もう少し golf れそうな感じもするけど…。

<参考リンク>

  • -

window.getSelection だけなら。

alert(
(function f(w){
  var d=w.document,s=w.getSelection()+'',q=s||d.querySelectorAll('input,textarea'),t,i=0;
  while(!s&&(t=q[i++]))s=t.value.slice(t.selectionStart,t.selectionEnd);i=0;
  while(!s&&(t=w[i++]))try{s=f(t)}catch(e){}
  return s||'';
})(this)
)

さらに window.top だけでいいなら。

alert(
(function(){
  var s=getSelection()+'',q=s||document.querySelectorAll('input,textarea'),t,i=0;
  while(!s&&(t=q[i++]))s=t.value.slice(t.selectionStart,t.selectionEnd);
  return s;
})()
)

さらに input,textarea を除いていいなら。

alert(
getSelection()+''
)