contenteditable div内のspan要素の後にカーソルを設定するにはどうすればよいですか? 今、contenteditable div内のspan要素内にイメージがあります。contenteditable div内のspan要素の後にカーソルを設定
いくつかの文字を追加すると、それらはスパンの内側に追加されますが、スパン要素の後ろに追加する必要があります。どのように私はこれを達成することができる任意のアイデア? IE < = 8以外のブラウザで
contenteditable div内のspan要素の後にカーソルを設定するにはどうすればよいですか? 今、contenteditable div内のspan要素内にイメージがあります。contenteditable div内のspan要素の後にカーソルを設定
いくつかの文字を追加すると、それらはスパンの内側に追加されますが、スパン要素の後ろに追加する必要があります。どのように私はこれを達成することができる任意のアイデア? IE < = 8以外のブラウザで
が、これはそれを行います。
function placeCaretAfterNode(node) {
if (typeof window.getSelection != "undefined") {
var range = document.createRange();
range.setStartAfter(node);
range.collapse(true);
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
}
}
をただし、一部のブラウザ(特にWebKitのベースのもの)は、ドキュメント内の位置は、キャレットのために有効であるかについての考えを修正しましたそれらのアイデアを遵守するために選択範囲に追加する範囲を正規化します。次の例では、FirefoxとIE 9ではなく、結果として、クロムまたはSafariでやりたいことになります。回避策の
どれも良いではありません。オプションは次のとおりです。
<a>
要素の例外を作るので、それ
<span>
の<a>
要素を使用して選択します私が念頭に置いていたこと: <script type="text/javascript">
function pasteHtmlAtCaret(char) {
var sel = rangy.getSelection();
var range = sel.rangeCount ? sel.getRangeAt(0) : null;
var parent;
if (range) {
var parentEl = document.createElement("span");
jQuery(parentEl).addClass('char').addClass('latest');
parentEl.appendChild(range.createContextualFragment(char));
// Check if the cursor is at the end of the text in an existing span
if (range.endContainer.nodeType == 3
&& (parent = range.endContainer.parentNode)
&& (parent.tagName == "SPAN")) {
range.setStartAfter(parent);
}
range.insertNode(parentEl);
if(jQuery(parentEl).parent().get(0).tagName.toLowerCase() == 'span'){
var spanParent = jQuery(parentEl).parent('span');
var parentEl = jQuery('<span class="char latest spanchild"></span>').insertAfter(spanParent).append(parentEl).get(0);
}
jQuery("span.spanchild").each(function(index, element){
var content = jQuery(element).children('span.char').first().html();
jQuery(element).children('span.char').remove();
jQuery(element).html(content);
jQuery(element).removeClass('spanchild');
});
range.setStartAfter(parentEl);
rangy.getSelection().setSingleRange(range);
jQuery(parentEl).removeClass('latest');
}
}
</script>
+1、自分自身の解決策も見てすばらしいです。 – halfer
私はこの問題を 'a'タグで解決することができました 
。 例: - 適切"<a>"+ content/element you want to add +"</a> "
だけspan.contentEditable = false
ティムのソリューションの仕事に;)
あなたの答えをありがとう。私は別の方法でそれをやりました。 –
@halfer私はできません: '投票の上に15の評判が必要です..' –
@Laurens:そうです、あなたは今できる! ':-p' – halfer