2014-01-15 30 views
-2

我想知道包括HTML在內的突出顯示文本的開始和結束位置(字符數)。獲取突出顯示文本div的位置

例子:

<div class="container">  
<div id="test"> 
     Hello world, how <a href="#">are</a> you doing? 
    </div> 
</div> 

我想知道例如:

function startStop(){ 
    // 
    // Do something here with selected text inside the DIV container 
    // 
    return { 
     start: ???, 
     stop: ??? 
    } 
} 

當我選擇了:how <a href="#">are</a> you輸出將是:start = 30stop = 57

注:這樣它從container div開始計數

UPDATE: 當我使用:window.getSelection().getRangeAt(0).startOffset它給我的開始偏移,但當前元素裏面,我想它的父元素。
所以在我的例子,將輸出6,如果我選擇了「世界」,但我還需要<div id="test">所以輸出必須是:21

+0

「開始和結束postiion」 - 你的意思是字符數?或高度/寬度位置?這有點令人困惑 –

+0

http://api.jquery.com/offset會給你像素座標。但是,如果你想要字符位置,你可能需要['.indexOf'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf) – Blazemonger

+0

@KyleR我的意思是「字符數」 –

回答

0

試試這個:

function startStop(word){ 
    var start = $.trim($('#test')[0].innerHTML).indexOf(word); 
    var stop = start + word.length; 
    return { 
     start: start, 
     stop: stop 
    } 
} 

微調將確保所有的空格等都被刪除。然後,我們只需檢查內部html中給定單詞的索引以瞭解開始。結尾等於給定單詞的開始+長度。

注意,它會返回29,而不是30,因爲它從0開始...

一個小的測試用例可以在這裏看到:http://jsfiddle.net/UQ2aC/


如果你想選擇的股利在內,你可以使用outerHTML代替的innerHTML(CFR。http://jsfiddle.net/UQ2aC/1/

$.trim($('#test')[0].outerHTML).indexOf(word); 

請注意,你必須確保你的HTML是很好的結構沒有空格在div中的句子之前。因爲這樣,它也會計數這些。


的選擇,如果你真的想用「髒」的HTML將是這樣的:

$.trim($('#test')[0].outerHTML).indexOf('>') + $.trim($('#test')[0].innerHTML).indexOf('world') + 1 

這將首先計算的第一個標籤本身的長度,並添加長度(cfr。http://jsfiddle.net/UQ2aC/2/

+0

請參閱最新的問題 –

+0

更新了我所能想到的所有可能性 –