2016-02-19 174 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

相关问题