1

ユーザーがdivに入力できるように、contenteditableのdivタグがあります。ユーザーがボタンを押したときに div にリンクを追加する機能があります。ユーザーが引き続き入力できるように、リンクの後にキャレットを配置したいと思います。リンクは何度でも挿入できます。

コード例:

<div id="mydiv" contenteditable="true" tabindex="-1">before <a href="#">link</a> after</div>

このコードは、IE、Firefox、Opera、Safari、および Chrome で動作する必要があります。

誰でも助けを提供できますか?

4

2 に答える 2

0

<a>という変数に挿入した要素への参照があると仮定しますlink

function setCaretAfter(el) {
    var sel, range;
    if (window.getSelection && document.createRange) {
        range = document.createRange();
        range.setStartAfter(el);
        range.collapse(true);
        sel = window.getSelection(); 
        sel.removeAllRanges();
        sel.addRange(range);
    } else if (document.body.createTextRange) {
        range = document.body.createTextRange();
        range.moveToElementText(el);
        range.collapse(false);
        range.select();
    }
}

setCaretAfter(link);
于 2010-08-31T23:33:32.907 に答える
0

CKEditor (http://ckeditor.com/) コードの中を調べたところ、appendBogus() 関数があり、追加の <br><span> </span></br> を挿入してから削除することがわかりました.

もちろん問題は、Gecko/IE ブラウザーにも <br> タグの動作に関するニュアンスがあることです (つまり、\r または \n を使用して範囲に挿入するか、 <br> 要素を追加するか)

_source/plugins/enterkey/plugin.js を読んで、IE と Gecko の処理に関するさまざまなニュアンスを確認できます。1つの大きなハックのようです...

于 2010-12-17T23:33:57.897 に答える