我遇到了以下問題 - 我想選擇的文本跨度內遍佈多個div。舉個例子選擇跨度進行的跨多個div問題
<div>asd<span>fgh</span></div>
<div><span>qwerty</span></div>
<div><span>uio</span>asd</div>
現在,在這種情況下,如果用戶點擊某個單詞qwerty
裏面我想選擇文本「fghqwertuio」 - >所有鄰近跨距。我使用下面的代碼來做到這一點:
var range = document.caretRangeFromPoint(lastTappedX, lastTappedY);
range.selectNodeContents(range.startContainer);
window.getSelection().addRange(range);
var containerNodes = document.body.children[0].children;
var whichChild = -1;
for (var i = 0; i < containerNodes.length; ++i) {
if (containerNodes[i] === range.startContainer.parentNode.parentNode) {
whichChild = i;
break;
}
}
if (whichChild === -1) {
console.log("couldn't find the highlighted div");
}
// go right the dom tree
for (var i = whichChild + 1; i < containerNodes.length; ++i) {
var containerChildren = containerNodes[i].children;
if (containerChildren[0]
&& containerChildren[0].style['background-color']) {
var newRange = document.createRange();
newRange.selectNodeContents(containerChildren[0]);
window.getSelection().addRange(newRange);
}
if (containerChildren.length > 1) {
break;
}
}
// go left the down tree
for (var i = whichChild - 1; i >= 0; --i) {
var containerChildren = containerNodes[i].children;
if (containerChildren[containerChildren.length - 1].style['background-color']) {
var newRange = document.createRange();
newRange
.selectNodeContents(containerChildren[containerChildren.length - 1]);
window.getSelection().addRange(newRange);
}
if (containerChildren.length > 1) {
break;
}
}
當我登錄時會發生什麼 - 我正確創建包含文本的範圍,我想,但選擇將其添加到選擇對象似乎並不上班。目前的選擇只是第一個添加的範圍。任何幫助如何解決這個將不勝感激。
你可以使用jQuery嗎? – iappwebdev
@Simon:jQuery對範圍和選擇沒有任何處理,並且不會幫助解決這裏的根本問題。 –
對不起,我真的不明白你的問題。我創建了一個小提琴,也許你可以基於小提琴來解釋你的問題:http://jsfiddle.net/6rvE7/1/ – iappwebdev