2011-03-31 70 views
0

我有類似HTML代碼中抵消這一個:入門字符嵌套HTML標籤

<pre> 
    words words words 
    words <span> words mystery words</span> 
    words words words 
</pre> 

我想用得到的字符與尊重的「謎」偏移到標籤Javascript(native或MooTools)。我可以使用anchorNode屬性獲取範圍標記,但我無法找到相對於標記獲取它的方法。

+0

''標籤在那裏。他們算作角色嗎? – BoltClock 2011-03-31 23:54:11

+0

他們不應該被計算在內。 – sslepian 2011-03-31 23:58:53

回答

8

你可以使用一個DOM Range做到這一點:

function getCharOffsetRelativeTo(container, node, offset) { 
    var range = document.createRange(); 
    range.selectNodeContents(container); 
    range.setEnd(node, offset); 
    return range.toString().length; 
} 

例子:

var sel = window.getSelection(); 
var pre = document.getElementById("your_pre_id"); 
var offset = getCharOffsetRelativeTo(pre, sel.anchorNode, sel.anchorOffset); 

注意事項:

  • 這將適用於除IE= 8之外的所有主流瀏覽器。如果您需要IE瀏覽器的解決方案,那麼我可以提供它。
  • 此功能將對<script><style>標籤和不可見元素(例如,由CSS display: none隱藏)中的字符進行計數。
+0

迄今爲止看起來不錯,謝謝。 – sslepian 2011-04-01 19:04:26

+0

請幫我用https://jsfiddle.net/,請我卡住了 – ShibinRagh 2017-03-14 05:47:49

0

你可以編寫一個方法來計算它使用遞歸解決方案...獲得字符偏移爲神祕,然後得到跨度的父節點,並獲得跨度的偏移量開始...重複,直到所需的標籤被找到(前),或者直到你用完的標籤