getSelection()不能在IE中工作
有人可以帮我得到这个代码工作在IE浏览器请:
HTML:
<p>Alex Thomas</p> <button id="click">Click</button>
JS
$('#click').click(function(){ var range = window.getSelection().getRangeAt(0); var selectionContents = range.extractContents(); var span = document.createElement("span"); span.style.color = "red"; span.appendChild(selectionContents); range.insertNode(span); });
在这里编码: http : //jsfiddle.net/WdrC2/
提前致谢…
9之前的IE不支持window.getSelection()
。 你可以使用document.selection
来代替(参见这个msdn页面的描述)。 这个select对象有一个方法createRange()
,它返回一个TextRange
对象(详见这个msdn页面 )。
请注意, selection
和textrange
对象都是微软自己的实现,不符合W3C标准。 您可以在www.quirksmode.org/dom/range_intro.html上阅读有关textrange
和range
问题的更多信息。
以下实现在IE中工作:
$('#click').click(function(){ var range = document.selection.createRange(); range.pasteHTML("<span style='color: red'>" + range.htmlText + "</span>"); });
它不像其他实现那么好,因为你必须使用string而不是dom。 将<span id="myUniqueId"></span>
作为占位符粘贴,然后用domreplace它。 你仍然需要使用range.htmlText
或range.text
。
顺便说一句:以上的实现显然是IE只。 您必须使用一些浏览器function检测来决定使用哪个版本。
在这里testing这个: http : //jsfiddle.net/6BrWe/
这是一个黑客和不那么漂亮,但应该在IE浏览器和其他浏览器工作 – 我还没有做了很多的跨浏览器testing,虽然:)
$('#click').click(function() { var whatBrowser = getIt(); if (whatIsIt == 'notIE' && whatBrowser) { notIE(whatBrowser); } else if (whatIsIt == "isIE"&& whatBrowser) { isIE(whatBrowser); }; }); var whatIsIt = ""; function getIt() { if (window.getSelection) { whatIsIt = "notIE"; return window.getSelection(); } else if (document.getSelection) { whatIsIt = "notIE"; return document.getSelection(); } else { var selection = document.selection && document.selection.createRange(); if (selection.text) { whatIsIt = "isIE"; return selection; }; return false; }; return false; }; function isIE(selection) { if (selection) { var selectionContents = selection.text; if (selectionContents) { selection.pasteHTML('<span class="reddy">' + selectionContents + '</span>'); }; }; }; function notIE(selection) { var range = window.getSelection().getRangeAt(0); var selectionContents = range.extractContents(); var span = document.createElement("span"); span.className= "reddy"; span.appendChild(selectionContents); range.insertNode(span); };
对于交叉浏览器解决scheme,请参阅StackOverflow上的这个问题: 是否有getSelection()的跨浏览器解决scheme?
这个问题不完全是这个问题的重复,所以我认为这个问题在这个答案中是有用的。 我做了这个答案社区维基。
如果你想着色“亚历克斯·托马斯”红色,你可以做
HTML
<p id='txt'>Alex Thomas</p> <input type='button' id='btn' value='click' />
JS
$('#click').click(function(){ $('#txt').attr('color','Red'); });
- 在IE7和IE8的箱子阴影
- IE10用户代理导致ASP.Net不发回Set-Cookie(IE10不设置cookie)
- 为什么一个自引用的iframe不是无限循环的,会导致我的机器崩溃?
- 当附加查询string参数或使用POST不是一个选项时,如何避免Internet Explorer 11中的AJAXcaching
- 如何使用开发人员工具在Internet Explorer 11中查看Cookie
- IE:无法从*下载*。 无法打开此Internet站点。 请求的网站不可用或无法find
- 为什么Internet Explorer不能在失败后的Ajax调用中发送HTTP POST主体?
- 如何隐藏IE8和IE9中的下拉箭头?
- SCRIPT438:对象不支持属性或方法IE