我想創建一個熒光筆工具,它的工作原理是這樣的:更換HTML,然後添加一個文件片段回HTML
- 用戶首先選擇的文本範圍。
- 他們然後單擊顏色按鈕之一,所選文本的背景突出
- 然後,他們選擇文本的另一個範圍...
- 現在,當他們按一下按鈕所有的HTML被替換爲緩存版本的HTML(沒有亮點)
- 然後,新突出顯示的新選定文本會被附加到新鮮的html中。
這樣一次只能突出顯示一個文本範圍。
問題:
我有一個很難理解的Range,Selection和Node API的
目前,我不能添加突出顯示的文本回新鮮的HTML ...我我只是將它附加到document.body。
我到目前爲止有:
https://jsfiddle.net/4mb39jd6/
(function(){
var highlighter = {
/**
*
*/
init: function(){
this.cacheDOM();
this.bindEvents();
},
/**
*
*/
cacheDOM: function(){
this.$html = $('.content').html();
this.$content = $('.content');
this.$highlighter = $('.highlighter');
},
/**
*
*/
bindEvents: function(){
this.$highlighter.on('mousedown', this.highlightSelection.bind(this));
},
/**
*
*/
highlightSelection: function(e){
var selection = window.getSelection(); // get selection
var text = selection.toString(); // get selected text
var newNode = document.createElement('span'); // create node
newNode.style.backgroundColor = $(e.target).css('backgroundColor'); // set node properties
newNode.appendChild(document.createTextNode(text)); // append selection text to node
var range = selection.getRangeAt(0); // 2 - get the selected range
range.deleteContents(); // delete the contents
range.insertNode(newNode); // insert the new node with the replacement text
documentFragment = range.cloneContents(); // clone the node
this.$content.html(this.$html); // refresh the content
document.body.appendChild(documentFragment); // add the new highlighted text
},
};
highlighter.init();
})();
問:
如何添加我的強調點......它看起來像這樣<span style="background-color: rgb(255, 255, 131);">some random text</span>
回成新的html文檔,以便它處於相同的位置。
任何具體的原因,你要克隆的全部內容? 'highlightSection'中最後三行的註釋似乎產生了所需的行爲... https://jsfiddle.net/wxrxf6r1/ – user3297291
是的,原因是我只想在任何一個給定時刻選擇一段文本。 ..因爲它是我可以突出各地...我只想要能夠一次選擇一個範圍。 –
你有沒有看過[mark.js](https://markjs.io/)? – dude