选中文字,点按钮
  <p><button onclick="setStyle('fontsize',false,'10')"  unselectable="on">setFont</button></p>
问题:
在做编辑器的时候,如何获得选中的element(如img\div\文字),然后设置其style?使用document.activeElement始终得到是body请高手指教了!
  </body>
  <script>
  function setStyle(c,b,v) {
    document.execCommand(c,b,v);
  }
  </script>

解决方案 »

  1.   

    您可能还不明白我的意思,我主要是想获得编辑域中被选中的element
    而execCommand的能力有限,比如我想给被选中的图片加个style='float:left'怎么办?
    而且是能兼容ie和firefox的方法
      

  2.   

    选中文字,点按钮
      <p><button onclick="setStyle('fontsize',false,'10')"  unselectable="on">setFont</button></p>
    问题:
    在做编辑器的时候,如何获得选中的element(如img\div\文字),然后设置其style?使用document.activeElement始终得到是body请高手指教了!
      </body>
      <script>
      function setStyle(c,b,v) {
        var rng = document.selection.createRange();
        rng.pasteHTML("<span style='color:red'>" + rng.text + "</span>");
      }
      </script>
      

  3.   

    document.selection.createRange();
    根本不兼容啊,firefox不支持而且,我的问题是给element修改style,不是给文字
      

  4.   

    网上有很多这方面的开源代码,比如FCKEditer你去down一个自己研究研究吧
      

  5.   

    FCKEditer看过,js代码根本没法看
      

  6.   

    document.selection
    firefox用window.selection现在的编辑器应该都不是找到元素来添加style的,都是通过range来插入html的做法。也许可以通过类似这样的方法来加吧,你看看这样是不是合乎题意了。  <script>
      function getHTML() {
        var rng = document.selection.createRange();
        alert(rng.htmlText);
      }
      function set(v) {
        var rng = document.selection.createRange();
        var txt = rng.htmlText;
        alert(txt);
        txt = txt.replace(/<([^<>]*? )style *?= *?([\'\"])([^<>]*?)\2>/i,'<$1style="color:'+v+'">');
        alert(txt);
        rng.pasteHTML(txt)
      }
      </script>
      <p><button onclick="set('blue')" unselectable="on">get</button><button onclick="getHTML()">get selection html</button></p>
    问题:
    <span style="color:red">在做编辑器的时候,如何获得选中的element(如img\div\文字),然后设置其style?使用document.activeElement始终得到是body请高手指教了!</span>
      </body>
      

  7.   

    。汗,
    用这个:
    <body>
    document.body.onclick=function(){
    alert(event.srcElement.tagName);
    }</body>
      

  8.   

    我试了
    firefox好象不支持window.selection通过range来插入html的做法我也会,但只能在ie 下实现,
    现在的问题是需要firefox也能实现
      

  9.   

    firefox下只有一个getSelection()的方法
      

  10.   

    to myxy82:
    这才是兼容的方法:
            document.body.onclick = function(event)
            {
                var evt = event || window.event;
                var target = evt.srcElement || evt.target;            
            };
    但是document处于编辑状态时,var evt = event || window.event;始终获得的是null
      

  11.   

    要说起兼容问题就太残酷了,现在浏览器版本这么多,又各执己见,对于对答问题最多只能提点思路。并不是给你最终通过COPY就能解决的方案。
    试试下面的代码吧,不要用firefox,用IE
    <body contenteditable=true>
    <div style="position:absolute;left:400px;top:100px;width:100px;height:100px;border:solid 1px #000;overflow:scroll" >div</div>
    <span style="position:absolute;left:200px;top:100px;width:100px;height:100px;border:solid 1px #000;overflow:scroll" >span</span><img style="position:absolute;left:300px;top:100px;width:100px;height:100px;border:solid 1px #000" alt="img">
    <script>
    for (var i=0;i<document.all.length;i++)
    document.all[i].oncontrolselect=function(){
    document.body.insertAdjacentHTML("BEFOREEND","你选择的对象标签为:"+ event.srcElement.tagName+"<br>");
    }</script>
    </body>
      

  12.   

    TextRange有一个parentElement属性,从而获得现在所选择的对象ff下是通过window.getSelection()来获取
      

  13.   

    在IE里相对的方法比较多,mozilla和ns都是用getSelection的,sorry,我记错了~:D,mozilla的range部分与IE相差比较多
    在IE里可以用type属性来得到控件的tagName,如:
    <p><button onclick="get()" unselectable="on">get</button></p>
    <iframe id="editor" height="500" width="500"></iframe>
    <script>
    var edt = document.getElementById("editor");
    var doc = edt.contentWindow.document;
    doc.open();
    doc.write("<html><head></head><div style='color:blue;font-weight:bold;position:absolute;left:200;top:300'>never-online</div><textarea style='width:200px;heigh:100px;'></textarea><body  contenteditable='true'></body></html>");
    doc.close();
    //doc.designMode="on";
    function get() {
      // if In IE
      alert(doc.selection.type);
      var rng=doc.selection.createRange();
      alert(rng(0).tagName);
    }
    </script>
      

  14.   

    不要逼我疯掉啊,我说了IE的方法我也玩得转,我现在需要的是兼容firefox 的方法啊
      

  15.   

    <body id="www.never-online.net">
    <p><button onclick="get()" unselectable="on">get</button></p>
    <iframe id="editor" height="500" width="500"></iframe>
    <script>
    var edt = document.getElementById("editor");
    var wnd = edt.contentWindow;
    var doc = edt.contentWindow.document;
    doc.open();
    doc.write("<html><head></head><div style='color:blue;font-weight:bold;position:absolute;left:200;top:300'>never-online</div><textarea style='width:200px;heigh:100px;'></textarea><body  contenteditable='true'></body></html>");
    doc.close();
    doc.designMode="on";
    var get = function () {
      alert(gettp());
      alert(gete().tagName);
    }var gettp = function () {
      _tp='Text'; var slct = wnd.getSelection();
      if(slct &&slct.rangeCount==1) {
        var rng=slct.getRangeAt(0);    
        if(rng.startContainer==rng.endContainer
        &&(rng.endOffset-rng.startOffset)==1
        &&rng.startContainer.nodeType!=Node.TEXT_NODE)
        _tp='Control';    
      }; return _tp;  
    };
    var gete = function () {
      if(gettp()=='Control') {
        var slct=wnd.getSelection();
        return slct.anchorNode.childNodes[slct.anchorOffset];    
      }
    };
    </script>
      </body>