我正在寻找允许我在选定文本之前或之后构建某些元素的函数。类似这样的一个javascript replace selection all browsers,但用于在选择之前或之后添加一些内容而不是替换它,如after()
和before()
jQuery方法。我应该使用一些DOM选择方法,如果是的话,哪一个?或者确实存在更容易实现的东西?在文本选择之前/之后添加元素
6
A
回答
10
这里有一对功能来做到这一点。
活生生的例子:http://jsfiddle.net/hjfVw/
代码:
var insertHtmlBeforeSelection, insertHtmlAfterSelection;
(function() {
function createInserter(isBefore) {
return function(html) {
var sel, range, node;
if (window.getSelection) {
// IE9 and non-IE
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = window.getSelection().getRangeAt(0);
range.collapse(isBefore);
// Range.createContextualFragment() would be useful here but is
// non-standard and not supported in all browsers (IE9, for one)
var el = document.createElement("div");
el.innerHTML = html;
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
}
} else if (document.selection && document.selection.createRange) {
// IE < 9
range = document.selection.createRange();
range.collapse(isBefore);
range.pasteHTML(html);
}
}
}
insertHtmlBeforeSelection = createInserter(true);
insertHtmlAfterSelection = createInserter(false);
})();
2
在MSIE: collapse给定范围和使用pasteHTML插入元件
其他: 另外collapse给定范围内,并且经由insertNode
两个插入元件折叠方法接受一个可选的参数,它定义了你想要折叠到的位置。 如果你想把元素放在最后,折叠到最后,否则到开始。
相关问题
- 1. 在添加子元素之前或之后创建文档树
- 2. 之前添加元素之前调用
- 3. jQuery的选择元素之前和元素中删除后/添加
- 4. 在jQuery中选择当前匹配元素之后的元素?
- 5. 选择XSLT 1.0中元素之前/之后的字符
- 6. 在img之后添加“</a>”jQuery将它添加到元素之前
- 7. xsltproc在多个文件之前和之后添加文本
- 8. 在包含字符串的元素之后添加文本
- 9. 在TextView之前或之后添加静态文本
- 10. 如何在jQuery.load(html)之后选择jQuery.Treeview中的当前元素?
- 11. jQuery:在指定元素之前选择最后一个匹配
- 12. 在文本文件的最后一行之前添加文本
- 13. ::添加内容之前,而不是之前的元素
- 14. NSMutablearray在其他元素之前或之后插入新元素
- 15. 之前/之后的伪元素
- 16. Aligning ::之前和::之后伪元素
- 17. 在元素之后选择DOM中的所有div元素?
- 18. 如何在第一个元素之前添加元素?
- 19. NHibernate - 刷新之前/之后选择?
- 20. jquery点击后选择之前的元素
- 21. simplexml_load_file在'.get_query()'之前添加文本。'
- 22. 在div中添加文本之前jquery
- 23. Powershell:在特定的当前兄弟元素之后添加新的XML元素
- 24. jQuery:在已添加选项之后更新选择内的选项文本?
- 25. 如何在另一个元素之后添加元素?
- 26. 在另一个元素之后添加元素?
- 27. 如何选择:之前和之后:元素(而不是其内容)?
- 28. ::选择伪选择器忽略::伪元素之前
- 29. Windows上的Safari支持:之前和之后:伪元素之后?
- 30. Eclipse - 自定义快速修复 - 在选择之前和之后添加一些文本
没有一个答案,但我敢打赌,你可以做到这一点很容易地使用添唐氏[瘦长](http://code.google.com/p/rangy /)库。 –