document.selection.createRange()在chrome和safari中不工作
document.selection.createRange() not working in chrome and safari
我使用textmode作为多行选项的文本框,它在IE中工作良好,Mozilla问题发生在Chrome和safari中。示例代码如下
<asp:TextBox ID="txtRootDescription" onpaste="DoPaste(this);" Width="600px" Rows="10" Columns="72" MaxLength="500" TextMode="MultiLine" runat="server"></asp:TextBox>
function DoPaste(control) {
maxLength = control.attributes["maxlength"].value;
if (maxLength) {
var oTR = control.document.selection.createRange();
}}
在chrome中,它给了我一个错误为"无法读取属性'选择'的未定义"
在非IE(不包括IE9)浏览器(见注释)中,使用window.getSelection
获取选择对象。在IE <9、原始代码应该可以工作
function GetSelection () {
if (window.getSelection) { // all browsers, except IE before version 9
var selectionRange = window.getSelection ();
return selectionRange.toString();
}
else {
if (document.selection.type == 'None') {
return "";
}
else {
var textRange = document.selection.createRange ();
return textRange.text;
}
}
}
function DoPaste(control) {
maxLength = control.attributes["maxlength"].value;
if (maxLength) {
var oTR = GetSelection();
}
}
通常,使用selection
和ranges
是非常棘手的,因为浏览器支持的差异很大。
这里有一个很好的参考,列出了浏览器支持(以及什么代码在哪里工作)和在相应浏览器中工作的示例代码:http://help.dottoro.com/ljefwsqm.php
在文档中获取选定文本时存在许多缺点,主要与文本是否在表单控件中被选中或作为其他元素的文本有关。试试这样一个函数:
function checkForSelectedText(e) {
var e = e || window.event;
var el = e.target || e.srcElement;
var tagName = el.tagName && el.tagName.toLowerCase();
var t;
var d = document;
// Try DOM 2 Range - for most browsers, including IE 6+
// However, doesn't get text selected inside form controls
// that allow selection of text content (input type text,
// textarea)
if (d && d.selection && d.selection.createRange) {
t = d.selection.createRange().text;
// Otherwise try HTML5 - note that getSelection returns
// a string with extra properties. This may also get
// text within input and textarea
} else if (d.getSelection) {
t = d.getSelection();
}
// If didn't get any text, see if event was inside
// inupt@type=text or textarea and look for text
if (t == '') {
if (tagName == 'textarea' ||
(tagName == 'input' && el.type == 'text')) {
// Check selectionStart/End as otherwise if no text
// selected, IE returns entire text of element
if (typeof el.selectionStart == 'number' &&
el.selectionStart != el.selectionEnd) {
t = el.value.substring(el.selectionStart, el.selectionEnd)
}
}
}
return t;
}
我会用JQuery来做同样的事情,因为它是跨浏览器的,你写的是更抽象的java脚本,而不是你目前写的本地浏览器特定的。
相关文章:
- jQuery Datepicker可以在Safari中工作,但不能在FF或Chrome中工作
- 为什么我的JavaScript在Safari上的严格模式下不能正常工作
- jQuery$.post可以在chrome、safari中工作,但不能在FF中工作(声明成功回调函数未定义)
- 异步加载的SVG过滤器feColorMatrix在Chrome中工作,而不是在Safari或Firefox中
- RGB 到 HEX JavaScript 函数在 Chrome 中工作,但不能在 Firefox 或 Safari 中工
- setInterval 或 window.location 在 Opera、IE 和 Safari 中无法正常工作
- window.onbeforeunload在IE8中不触发(在Firefox,Chrome和Safari中工作正常)
- toLocaleString()不会'无法在Safari浏览器中工作
- 动画HTML5横幅工作在除Safari以外的一切
- Date.prototype.get日期;不能在Safari中工作
- jQuery UI手风琴无法在本地目录的Safari中工作
- html+css+js组合在Google Chrome或Safari浏览器中无法正常工作
- window.open()没有'无法在添加到主屏幕的移动Safari web应用程序中工作
- webkitAudioContext在iOS Safari上创建MediaElementSource不工作
- JQuery图像大小计算没有'不能在Chrome/Safari中工作
- JavaScript倒计时;不能在Safari中工作
- style.display无法在Chrome、Safari-Firefox、IE11中正常工作
- 为什么这个html5音频不能在chrome上工作,但在safari上工作得很好
- 复选框事件处理程序抛出错误的点击事件在chrome浏览器,safari工作良好的键盘事件
- document.referrer不在safari工作