您可以通過adding a range改變選擇的邊界:
var sel = window.getSelection(),
range = sel.getRangeAt(0);
var startEl = sel.anchorNode;
if (startEl != range.commonAncestorContainer) {
while (startEl.parentNode != range.commonAncestorContainer) {
startEl = startEl.parentNode;
}
}
var endEl = sel.focusNode;
if (endEl != range.commonAncestorContainer) {
while (endEl.parentNode != range.commonAncestorContainer) {
endEl = endEl.parentNode;
}
}
range.setStartBefore(startEl);
range.setEndAfter(endEl);
sel.addRange(range);
上面的例子會給你擴展到涵蓋選擇包括開始和結束節點之間的整個樹(包括commonAncestorContainer()
)。
這將文本節點視爲等同於dom元素,但這不應該成爲您的問題。
演示:http://jsfiddle.net/Nq6hr/2/
我看到你在你的選擇中添加一個div,一旦添加,你認爲你可以得到這個div的父母,然後選擇它?但是,最終可能會出現奇怪的行爲。 – boulaycote
該div僅用於顯示選定的文本。選定的文本本身沒有添加div。 = \ – NullVoxPopuli
因此,選擇該div的父級,可能會選擇整個頁面。 – NullVoxPopuli