2011-03-24 53 views
22
不工作

有人可以帮助我得到这个代码在IE工作,请:getSelection()在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/

在此先感谢...

+1

@ 9之前的亚马逊IE不执行'getSelection()'。 – 2011-03-24 15:52:56

+0

哪个版本的IE? – Ryre 2011-03-24 15:53:12

+0

该代码适用于Chrome 8中的我。我选择了文本并单击了该按钮,文本变为红色,所以有些作品可行。 – Blender 2011-03-24 15:55:47

回答

22

IE 9之前不支持window.getSelection()。您可以改为使用document.selection(有关说明,请参见this msdn page)。此选择对象的方法createRange()返回TextRange对象(有关详细信息,请参阅this msdn page)。

请注意,selectiontextrange对象都是微软自己的实现,并且不遵循W3C标准。您可以阅读关于www.quirksmode.org/dom/range_intro.html上的textrangerange问题的更多信息。

下面的实现在IE:

$('#click').click(function(){ 
    var range = document.selection.createRange(); 
    range.pasteHTML("<span style='color: red'>" + range.htmlText + "</span>"); 
}); 

这不是几乎一样好其他的实现,因为你有一个字符串,而不是DOM工作。有一点点,你粘贴<span id="myUniqueId"></span>作为占位符,然后用dom替换它。尽管如此,您仍需要使用range.htmlTextrange.text

顺便说一句:上面的实现显然是IE只有。您必须使用一些浏览器功能检测来决定使用哪个版本。

+0

很好的答案,我会试试这个,谢谢。 – Alex 2011-03-25 09:58:02

+0

你确定IE9不支持'window.getSelection()'? http://msdn.microsoft.com/en-us/library/ie/ff975169(v=vs.85).aspx说它.. – Rijk 2013-05-10 09:55:11

+0

@瑞克你是对的,这就是为什么我写了“IE *之前*到9不支持window.getSelection()。“ :) – 2013-05-10 14:08:51

-3

如果你想要的颜色 “亚历克斯·托马斯” 为红色,你可以做

HTML

<p id='txt'>Alex Thomas</p> 
<input type='button' id='btn' value='click' /> 

JS

$('#click').click(function(){ 
    $('#txt').attr('color','Red'); 
}); 
+0

一个毫无意义的答案,但无论如何感谢。 – Alex 2011-03-24 16:20:08

+4

他想让'Alex Thomas'的突出部分变红,而不是整个事情。 – 2011-03-24 18:40:55

1

测试这一位置:http://jsfiddle.net/6BrWe/

这是一个黑客位的和不那么漂亮,但应以IE和其他浏览器 - 我没有做过很多跨浏览器测试,虽然:)

$('#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); 
}; 
+0

随着所有的JS,我不得不想知道为什么你不只为第一行做一个'document.getElementById(“click”)。onclick'。但是,对于使用功能检测的完整答案+1。 – 2011-03-24 21:49:43

+0

OP在那里有jQuery,所以我没有改变那个部分 – 2011-03-24 22:14:58

0

对于一个跨浏览器的解决方案看这个问题在计算器上:Is there a cross-browser solution for getSelection()?

这个问题是不是这一个相当重复的,所以我觉得这个问题在这个答案链接,而不是它是有用的。我做了这个答案社区维基。