2013-07-16 73 views
15

我想通過發送定位/ anchorOffset和長度/偏移使用Javascript這裏選擇文本是我的代碼集選擇的範圍在Javascript

var node = document.getElementById("content"); 
    var range = document.createRange(); 
    range.setStart(node, 0); 
    range.setEnd(node, 4); // here 0 and 4 is my location and length for the selection 
     // if my string is "This is test string" in my case its must select "This" 
    var selection = window.getSelection(); 
    selection.removeAllRanges(); 
    selection.addRange(range); 

但問題是range.setStart和range.setEnd它不是按我期望的方式工作

+0

@AndyG我在我的IOS應用程序中使用它。剩餘功能正常工作,但問題是隻有setStart和setEnd都不起作用 –

+1

@AndyG:錯誤的方式。 'document.createRange()'是標準的,除了IE <= 8之外的所有東西都支持。 –

+0

謝謝@TimDown。我在看'selection.createRange'。 –

回答

12

DOM Range的setStart()setEnd()方法已詳細說明,因此您可以通過閱讀the specMDN找到答案。總而言之,如果要根據字符偏移來指定範圍邊界,則需要處理文本節點而不是元素。如果你的元素包含一個文本節點,改變你的代碼的第一行下面的工作:

var node = document.getElementById("content").firstChild; 
+0

偉大它在這種情況下工作,如果我在「內容」中只有一個文本行。如果我在字符串上應用了粗體或字體標籤,那麼怎麼辦? –

+1

@ShinningRiver:那麼你需要一個更復雜的解決方案,比如http://stackoverflow.com/a/13950376/96100 –

8

這裏的,如果你想選擇一個jQuery結果很好地解決設置

var $newSelection = $('.someElements'); 
var selection = window.getSelection(); 
var range = document.createRange(); 
range.setStartBefore($newSelection.first()[0]); 
range.setEndAfter($newSelection.last()[0]); 
selection.removeAllRanges(); 
selection.addRange(range);