簡體   English   中英

在jQuery中替換選定的HTML文本

[英]Replacing selected HTML text in jQuery

我有這個代碼替換選定的文本:(它在所選文本之前和之后推桿“1”和“2”):

var content=$("#text").html();
if (window.getSelection) {
 // not IE case
 var selObj = window.getSelection(); 
 var selRange = selObj.getRangeAt(0);

 content2 = content.substring(0,selRange.startOffset) + "1" + content.substring(selRange.startOffset,selRange.endOffset) + "2" + content.substring(selRange.endOffset,content.length);
 $("#content").html(content2);
 selRange.removeAllRanges();
} else if (document.selection && document.selection.createRange && document.selection.type != "None") {
 // IE case
 range = document.selection.createRange();
 var selectedText = range.text; 
 var newText = '1' + selectedText + '2'; 
 document.selection.createRange().text = newText; 
}

和HTML:

<div id="text">aaa as asd das d</div>

這適用於“純”文本,但如果我的HTML看起來像這樣(粗體文本)

<div id="text">aaa as <b>asd</b> das d</div>

它在firefox中崩潰,因為selRange.startOffset對象沒有返回所需的位置...

還有一個問題......在IE中,這可以正常使用粗體和“普通”文本但是因為對於IE我沒有使用jquery html()函數 - 文本不能用HTML代碼替換。 因此,如果我想使用“<b>”和“</ b>”而不是“1”和“2”,則文本不會像firefox中那樣以粗體顯示。

這兩個問題能解決嗎?

startOffsetendOffset在當前節點的偏移,得到它,你需要range.startContainerrange.endContainer

編輯:如果startContainerendContainer處於同一級別(保留DOM樹結構),它的工作正常。

EDIT2:現在它使每個選定的文本變為粗體。

我還重寫了IE部分,現在它在HTML上運行,所以它很好。

http://jsfiddle.net/FYJtN/11/

if (window.getSelection) {
    // not IE case
    var selObj = window.getSelection();
    var selRange = selObj.getRangeAt(0);

    var newElement = document.createElement("b");
    var documentFragment = selRange.extractContents();
    newElement.appendChild(documentFragment);
    selRange.insertNode(newElement);

    selObj.removeAllRanges();
} else if (document.selection && document.selection.createRange && document.selection.type != "None") {
    // IE case
    var range = document.selection.createRange();
    var selectedText = range.htmlText;
    var newText = '<b>' + selectedText + '</b>';
    document.selection.createRange().pasteHTML(newText);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM