この記事では、JavaScriptでカーソル位置にテキストラベルノードを挿入・追加する詳しい方法を中心に紹介します。非常に良い基準値を持っています。以下のエディターで見てみましょう
正しい方法は、Selection オブジェクトと Range オブジェクトを正しく使用して、カーソルの現在位置にテキストまたはノードを挿入することです。ただし、IE でのこれら 2 つのオブジェクトの適用方法と標準の DOM 方法は異なります。
アイデア: まずユーザーの選択を取得します (カーソルの現在位置は、同じ開始位置と終了位置を持つ選択として理解できます)。次に、Selection オブジェクトを Range オブジェクトに変換します。その目的は、Range オブジェクトのメソッドを使用してコンテンツを挿入することです。最後に、挿入アクションが完了したら、挿入されたコンテンツの後ろにカーソルを移動します。
var sel = win.document.selection; //IE var sel = win.getSelection(); //DOM var range = sel.createRange(); // IE下 var range = sel.getRangeAt(0); // DOM下 if(range.startContainer){ // DOM下 sel.removeAllRanges(); // 删除Selection中的所有Range range.deleteContents(); // 清除Range中的内容 // 获得Range中的第一个html结点 var container = range.startContainer; // 获得Range起点的位移 var pos = range.startOffset; // 建一个空Range range = document.createRange(); // 插入内容 var cons = win.document.createTextNode(",:),"); if(container.nodeType == 3){// 如是一个TextNode container.insertData(pos, cons.nodeValue); // 改变光标位置 range.setEnd(container, pos + cons.nodeValue.length); range.setStart(container, pos + cons.nodeValue.length); }else{// 如果是一个HTML Node var afternode = container.childNodes[pos]; container.insertBefore(cons, afternode); range.setEnd(cons, cons.nodeValue.length); range.setStart(cons, cons.nodeValue.length); } sel.addRange(range); }else{// IE下 var cnode = range.parentElement(); while(cnode.tagName.toLowerCase() != “body”){ cnodecnode = cnode.parentNode; } if(cnode.id && cnode.id==”rich_txt_editor”){ range.pasteHTML(",:),"); } } win.focus();
innerHTMLとpasteHTMLの違い
innerHTMLは属性であり、要素内のHTMLコンテンツを取得または設定でき、HTMLの子ノードを含むことができる任意の要素で使用できます。
pasteHTML() は、指定されたテキスト領域内のテキストまたは HTML を置換するメソッドです。このメソッドは、createTextRange() または document.selection.createRange() によって作成された領域に適用する必要があります
var oRange = document.selection.createRange(); if(oRange.text!=''){ var oHtml = '<a href="#" rel="external nofollow" target=_blank>oRange.text</a>'; oRange.pasteHTML(oHtml); }
以上がJavaScriptでカーソル位置にテキストラベルノードを挿入・追加する方法を詳しく紹介します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。