none
document.selection.createRange IE浏览器兼容的问题 RRS feed

  • 问题

  • IE下测试(在其他浏览器是正常运行的,就是IE出这种问题):

    <div onclick="Javascript:UBB.B();">B</div>
    直接这样写可以正常运行


    <script>
    var div = document.createElement("div");
    div.innerHTML = "B";
    $(div).click(UBB.B);
    $("#footer").append(div);
    </script>
    这种bind的方式就不能运行了,想知道,在bind时候,是不是document.selection.createRange()已经丢失呢?

    注:我用的jquery1.4

    UBB代码如下:

    var UBB =
    {
        element: false,
        
        getSelection: function()
        {
            var selected = "";
            
            if(!!document.selection)
            {
                var cr = document.selection.createRange();
                selected = cr.text;
            }
            else if(!!UBB.element.setSelectionRange)
            {
                selected = UBB.element.value.substring(UBB.element.selectionStart,UBB.element.selectionEnd);
            }
            
            return selected;
        },
        
        B: function()
        {
            UBB.Replace("[b]", "[/b]");
        },    
        
        Replace: function(head, foot)
        {
            UBB.element = $("#content").get(0);
            UBB.element.focus();
            var selected = UBB.getSelection();

            if(selected.length > 0)
            {
                if(!!document.selection)
                {
                    var range=document.selection.createRange();
                    range.text = head + selected + foot;
                }
                else if(!!this.element.setSelectionRange)
                {
                    var start = UBB.element.selectionStart;
                    var end = UBB.element.selectionEnd;
                    var part = UBB.element.value.substring(0, start);
                
                    part = part + head;
                    part = part + selected;
                    part = part + foot + UBB.element.value.substring(end);
                    
                    UBB.element.value = part;
                }
            }
        }
    }



    在其他浏览器是正常运行的,就是IE出这种问题。

    http://www.triiy.com
    • 已移动 Sheng Jiang 蒋晟 2010年1月23日 16:31 非System.Web (发件人:ASP.NET 与 AJAX)
    2010年1月22日 5:40

全部回复

  • var docSel;

    if(docoment.createRange)//ff和标准2级dom

    docSel=document.createRange();

    else if(document.selection&&document.selection.createRange)//ie

    docSel=document.selection.createRange();
    2010年1月22日 7:24
  • var docSel;

    if(docoment.createRange)//ff和标准2级dom

    docSel=document.createRange();

    else if(document.selection&&document.selection.createRange)//ie

    docSel=document.selection.createRange();


    在IE8下,我不改UBB对象的代码,<div onclick="Javascript:UBB.B();">B</div>,直接这样写可以正常运行,说明UBB的代码正常


    你看我下面的代码就不能运行了,是通过事件绑定到div上,是绑定这个动作使得操作失败!
    <script>
    var div = document.createElement("div");
    div.innerHTML = "B";
    $(div).click(UBB.B);
    $("#footer").append(div);
    </script>
    这种bind的方式就不能运行了,但是跟进去发现document.selection对象是存在,但是document.selection.createRange().text是空字符

    http://www.triiy.com
    2010年1月22日 7:47
  • 这是jquery问题了  你可以用js dom标准事件绑定
    div.onclick=UBB.B;

    2010年1月22日 8:02
  • 我猜测是IE对事件处理不好的问题,其他浏览器都没有问题,jquery应该没有问题的,我没有时间去测试了,太忙了~~~~~~~
    http://www.triiy.com
    2010年1月27日 5:15
  • ->"$(div).click(UBB.B);
    $("#footer").append(div);"
    你把这两句用标准写法 替换一下看是否可以,比如
    $(div).click(UBB.B) -> document.getElementsByTagName('div')[i].onclick=UBB.B
    对i 做一下遍历。


    This posting is provided "AS IS" with no warranties, and confers no rights. Microsoft Online Community Support
    2010年1月27日 9:53
    版主