我有一个contentEditable div,我想插入HTML标签(一个简单的span元素).
是否有跨浏览器解决方案,允许我在div选择或光标位置插入这些标签.如果在页面上选择了其他内容(而不是在div中),我想将标记附加到div的末尾.
谢谢
最佳答案
这是一个kickstart
// get the selection range (or cursor position)
var range = window.getSelection().getRangeAt(0);
// create a span
var newElement = document.createElement('span');
newElement.id = 'myId';
newElement.innerHTML = 'Hello World!';
// if the range is in #myDiv ;)
if(range.startContainer.parentNode.id==='myDiv') {
// delete whatever is on the range
range.deleteContents();
// place your span
range.insertNode(newElement);
}
我没有IE但在firefox,chrome和safari上工作正常.也许你想玩range.startContainer只有在contentEditable div上进行选择才能继续.
编辑:根据quirksmode range intro你必须改变window.getSelection()部分是IE兼容.
var userSelection;
if (window.getSelection) {
userSelection = window.getSelection();
}
else if (document.selection) { // should come last; Opera!
userSelection = document.selection.createRange();
}