2011-11-29 65 views
1

HTML:Rangy:如何擴展基於父節點的選擇?正被選擇

some te<b>xt here is bold</b>ed, I guess 
       |______________________| <- the selection range 

所以,所選擇的.toHtml()是這樣的:

<b>ere is bold</b>ed, I gue 

但這不是原始文檔英寸

所以,我想要做的是擴大選擇,使其包含整個BOLD標記。

這是容易察覺,因爲你只需要做一個測試,如果

a = rangy.getSelection() 
a.anchorNode.parentElement != a.focusNode.parentElement 

的文檔指出瘦長範圍有setStartBefore(Node)方法:http://code.google.com/p/rangy/wiki/RangyRange

所以,我得到的電流範圍

b = a.getRangeAt(0) 

,並嘗試setStartBefore:

b.setStartBefore(a.anchorNode.parentNode) 

既然我做的這一切都在控制檯中,我得到即時反饋說

undefined 

會是什麼造成這一點,我怎麼會去周圍尋找問題的解決方案我想解決?

UPDATE: 按添下的建議,我已經試過如下:
enter image description here 原始文本:
enter image description here

它應該擴展到包括質量Ef中應該沒有吧有?

更新2:

解決方案(按照添下) enter image description here

+0

問題中提供的解決方案實際上不是真正的解決方案。如果是,'b.canSurroundContents()'將返回'true'。我正在嘗試做同樣的事情,但仍然無法讓'b.canSurroundContents'返回true。有任何想法嗎? – matte

+0

我已經在這裏詳細詢問了一些例子:http://stackoverflow.com/questions/13141992/with-rangy-even-though-i-extend-the-range-by-set-startbefore-method-containsnod – matte

回答

3

您需要重新選擇的範圍:

a.setSingleRange(b); 

通過是沒有得到普遍支持parentElement的方式:它開始只有IE瀏覽器,相對來說最近已經進入DOM4 spec,並且Firefox(support is coming in Firefox 9.0,顯然)還不支持。您需要基於parentNodenodeType的解決方法。

+0

我是不要太擔心瀏覽器兼容atm。但是我很欣賞這個警告,因爲我很快就會擔心這一點。我已經用我的結果更新了我的問題。setSingleRange(b)中; – NullVoxPopuli

+0

@TheLindyHop:從該屏幕截圖看來,在重新選擇它之前,您沒有做任何事情('setStartBefore()'等等)。 –

+0

非常好,我會張貼我所做的工作的屏幕截圖,使其爲有問題的未來人員工作。 – NullVoxPopuli