2016-02-19 222 views
4

在考慮瀏覽器兼容性時,在span標籤內選擇文本的方法是什麼?例如,我有:在span標籤內選擇文本

jQuery().html('<p>Hello world <span>lorem ipsum</span> my good friend!'); 

我希望lorem ipsum部分將被選擇光標

我有這個code它選擇文本:

function SelectText(element) { 
    var doc = document 
     , text = doc.getElementById(element) 
     , range, selection 
    ;  
    if (doc.body.createTextRange) { 
     range = document.body.createTextRange(); 
     range.moveToElementText(text); 
     range.select(); 
    } else if (window.getSelection) { 
     selection = window.getSelection();   
     range = document.createRange(); 
     range.selectNodeContents(text); 
     selection.removeAllRanges(); 
     selection.addRange(range); 
    } 
} 
+1

不錯的問題。我希望看到一種適用於移動瀏覽器的方法。 –

+1

[選擇元素中的文本(類似於使用鼠標突出顯示)]的可能重複](http://stackoverflow.com/questions/985272/selecting-text-in-an-element-akin-to-highlighting-with-你的鼠標) – Harangue

+0

你在說css中的'cursor:pointer'嗎? –

回答

0

HTML代碼

<input type="text" name="firstName" value="Enter your name..." /> 

JS代碼

//SELECT TEXT RANGE 
$.fn.selectRange = function(start, end) { 
    return this.each(function() { 
     if (this.setSelectionRange) { 
      this.focus(); 
      this.setSelectionRange(start, end); 
     } else if (this.createTextRange) { 
      var range = this.createTextRange(); 
      range.collapse(true); 
      range.moveEnd('character', end); 
      range.moveStart('character', start); 
      range.select(); 
     } 
    }); 
}; 
$('input[name=firstName]').focus().selectRange(5,10); 

Click Here For Permanent link to jsfiddle

//SELECT TEXT RANGE 
 
$.fn.selectRange = function(start, end) { 
 
    return this.each(function() { 
 
     if (this.setSelectionRange) { 
 
      this.focus(); 
 
      this.setSelectionRange(start, end); 
 
     } else if (this.createTextRange) { 
 
      var range = this.createTextRange(); 
 
      range.collapse(true); 
 
      range.moveEnd('character', end); 
 
      range.moveStart('character', start); 
 
      range.select(); 
 
     } 
 
    }); 
 
}; 
 
$('input[name=firstName]').focus().selectRange(5,10);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" name="firstName" value="Enter your name..." />

+0

@亨利克佩特森這可以幫助你選擇光標 –

2

你的意思是這樣的嗎?

var i = 0; 
 
function SelectText(element) { 
 
    var doc = document 
 
     , text = doc.querySelectorAll(element) 
 
     , range, selection 
 
    ; 
 
    
 
    if (doc.body.createTextRange) { 
 
     range = document.body.createTextRange(); 
 
     range.moveToElementText(text[i]); 
 
     range.select(); 
 
    } else if (window.getSelection) { 
 
     selection = window.getSelection();   
 
     range = document.createRange(); 
 
     range.selectNodeContents(text[i]); 
 
     selection.removeAllRanges(); 
 
     selection.addRange(range); 
 
    } 
 
    i++; 
 
    if (i === text.length) i = 0; 
 
} 
 

 
document.onclick = function(e) {  
 
    if (e.target.className === 'click') { 
 
     SelectText('span'); 
 
    } 
 
};
<div>Hello world <span>lorem ipsum</span> my good friend!</div> 
 
<div>Hello world <span>lorem ipsum</span> my good friend!</div> 
 
<p class="click">Click me!</p>

,如果你只需要選擇一個標籤元素,你可以使用querySelector代替querySelectorAll


這裏以.html()的一個例子

$(function() { 
 
    $('body').html('<p>Hello world <span>lorem ipsum</span> my good friend!'); 
 
    }) 
 

 
function SelectText(element) { 
 
    var doc = document 
 
     , text = doc.querySelector(element) 
 
     , range, selection 
 
    ; 
 
    
 
    if (doc.body.createTextRange) { 
 
     range = document.body.createTextRange(); 
 
     range.moveToElementText(text); 
 
     range.select(); 
 
    } else if (window.getSelection) { 
 
     selection = window.getSelection();   
 
     range = document.createRange(); 
 
     range.selectNodeContents(text); 
 
     selection.removeAllRanges(); 
 
     selection.addRange(range); 
 
    } 
 
    
 
} 
 

 
window.onload = function() {  
 
    
 
     SelectText('span'); 
 
    
 
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

+1

這正是我的意思,但是,我想用.html()輸出文本,並將文本包裹在頁面加載時選擇了,而不是點擊。 –

+0

感謝您的更新,但.html()是通過ajax(頁面加載後)添加的。對不起,我沒有正確澄清這一點。你能調整你的代碼,通過ajax輸出.html(),並且選擇span標籤中的文本嗎?如果符合條件,我將用50分獎賞這個獎勵。謝謝!這整天都很頭疼。 –

+0

重點是在內容添加後立即調用該功能,如果您有問題請打開一個新問題 – maioman

相關問題