none
selectionがie11でサポートされなくなってどうしよう RRS feed

  • 質問

  • 引用の新ブックマークレット - マイクロソフト コミュニティ

    の話なのですが、

    引用.url

    javascript:with(frames[0].document.selection.createRange()){pasteHTML('<br><blockquote>'+htmlText.replace(/<p>|<\/p>/ig,'')+'</blockquote><br>');}

    使用法

    編集ボックス内で、引用の中に入れたい部分を選択して、引用.urlをクリックします。

    あるいは、

    編集ボックス内で、引用を挿入したいところにカーソルを置いて、引用.urlをクリックします。

    document.selection.createRange()が使えないので、後者の用法では、

    javascript:frames[0].getSelection().collapseToEnd();frames[0].document.execCommand('insertbutton',0,'zxcvbnm');frames[0].document.getElementById('zxcvbnm').outerHTML=('<br><blockquote><br></blockquote><br>')

    前者の用法では、
    javascript:with(frames[0].document){execCommand('CreateLink',false,'http://zxcvbnm/');for(var k=0;k<links.length;k++){if(links.item(k).href=='http://zxcvbnm/'){links.item(k).outerHTML='<blockquote>'+links.item(k).innerHTML+'</blockquote>';}}}

    なんてのを編み出したのですが、いかにも無理筋。

    もっといいやり方はありませんか?ふつうはどうやるのでしょうか?

    2013年11月24日 6:09

回答

すべての返信

  • 最近のものはよく知らず恐縮ですが、document.createRange()で出来ませんか?
     
    http://msdn.microsoft.com/ja-jp/library/windows/apps/hh767317.aspx
     
    DOM4にあるようにMutationObserverとも連携して、
    エディタ等の作成に向いた細かい制御が出来るようになっていると期待しています。(未調査)
    2013年11月24日 16:11
  • (´・ω・`)さん、コメント感謝。

    最近のものはよく知らず恐縮ですが、document.createRange()で出来ませんか?

    そこから調べて、こんな感じでできました。

    javascript:frames[0].getSelection().getRangeAt(0).surroundContents(frames[0].document.createElement('blockquote'));

    Range.surroundContents()がTextRange.execCommand()の多くの代替になりそう。

    execCommand()の場合、編集履歴が残って、CTRL+Zで元に戻りますが、surroundContents()は、編集履歴が残らず、CTRL+Zで元に戻らないという違いがあるよう。

    2013年11月24日 16:25