निम्नलिखित समारोह एक डोम नोड सभी प्रमुख ब्राउज़रों में चयन के अंत में (तत्व या पाठ नोड) से जोड़ दिया जाएगा (ध्यान दें कि फ़ायरफ़ॉक्स अब डिफ़ॉल्ट रूप से एकाधिक चयन की अनुमति देता है; निम्नलिखित केवल पहले चयन का उपयोग करता है):
function insertNodeAfterSelection(node) {
var sel, range, html;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.collapse(false);
range.insertNode(node);
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
range.collapse(false);
html = (node.nodeType == 3) ? node.data : node.outerHTML;
range.pasteHTML(html);
}
}
आप बल्कि एक HTML स्ट्रिंग डालने चाहते हैं:
function insertHtmlAfterSelection(html) {
var sel, range, node;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = window.getSelection().getRangeAt(0);
range.collapse(false);
// 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) {
range = document.selection.createRange();
range.collapse(false);
range.pasteHTML(html);
}
}
अपडेट 18 जनवरी 2012
अंत में, यहां एक संस्करण है जो HTML को सम्मिलित करता है और चयन को संरक्षित करता है (यानी। मूल रूप से चयनित सामग्री और सम्मिलित सामग्री को शामिल करने के लिए चयन का विस्तार करता है)।
लाइव डेमो: http://jsfiddle.net/timdown/JPb75/1/
कोड:
function insertHtmlAfterSelection(html) {
var sel, range, expandedSelRange, node;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = window.getSelection().getRangeAt(0);
expandedSelRange = range.cloneRange();
range.collapse(false);
// 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);
// Preserve the selection
if (lastNode) {
expandedSelRange.setEndAfter(lastNode);
sel.removeAllRanges();
sel.addRange(expandedSelRange);
}
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
expandedSelRange = range.duplicate();
range.collapse(false);
range.pasteHTML(html);
expandedSelRange.setEndPoint("EndToEnd", range);
expandedSelRange.select();
}
}
स्रोत
2010-08-30 10:38:23
कैसे आप पहली जगह में निर्देशांक मिलता है? क्योंकि 'window.getSelection()' किसी भी x, y निर्देशांक – Abdel