没人回答么?
Range和html 上的object可以互相转换么?

解决方案 »

  1.   

    例子:
    Object.getAbsoluteTop = function(obj){
    var top = 0;
    while(obj.tagName != "body"){
    top = obj.offsetTop;
    if(obj.parent){//判断一下是否有空
    obj = obj.parent;
    }else{
    break;
    }

    }
    return top;
    }
      

  2.   

    sel.parentElement() && sel.parentElement().tagName.toLowerCase()!="body" === >
    sel.parentElement && sel.parentElement().tagName.toLowerCase()!="body" 应该是这样写条件吧。     
      

  3.   

    我查了一下文档。
    var sel = content.document.selection.createRange();//选种区域的对象
    createRange()返回的是TextRange 对象,就是选中部分。
    例如:<div>132</div> 选中的是div是的123 这是sel是123而不是123的DIV
    当sel.parentElement()得到是是123的父对象也就是div。。
      

  4.   

    我在逐级别获得parentElement的时候就出错了
      

  5.   

    parentElement是一个属性,你好像把它当方法用了...
      

  6.   


    parentNode是一个属性,而parentElement是一个方法。
      

  7.   

    是属性还是方法 都是有返回值的。
    都是返回object节点 
    我就纳闷.parentElement为什么有错误
      

  8.   

    parentNode Property: Retrieves the parent object in the document hierarchy. 
      
    parentElement Property:Retrieves the parent object in the object hierarchy. 
      

  9.   


    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>无标题文档</title>
    </head>
    <script>
    function onMousedown(ev){

    var sel = document.selection.createRange();
    var rangtype= document.selection.type
    if(rangtype.toLowerCase()=="control") return;//如果是控件就返回
    var psl=sel.parentElement() while (psl.tagName.toLowerCase()!="body"){
    if(!psl.tagName||!psl.parentElement().tagName || psl.tagName.toLowerCase()=="body"  || psl.parentElement().tagName.toLowerCase()=="body"){
    alert("-----------")
    break;
    }
    psl=psl.parentElement();
    }
    return;
    }
    </script>
    <body>
    <div contentEditable=true id=contentInner_title onMouseDown="onMousedown(event)"  >点击<strong>添加标题点击</strong>添<font color="#339933">加<a>标题点击添加标题点击添加标</a>标题点击</font>添加标题点击添加标题点击添加标题</div></body>
    </html>
      

  10.   

    Free_Wind22 谢谢你.你给我上了一课.要不是你,我还真没注意他们的区别~!
      

  11.   

    第一点parentElement是ie专用的,就是说在firefox(ff)浏览器里是不能使用的,一般情况parentNode可以取代parentElement的所有功能。第二点就如名字所说,parentElement匹配的是parent为element的情况,而parentNode匹配的则是parent为node的情况。element是包含在node里的,它的nodeType是一,以上是我的猜测,下面是我做的测试。"document"节点(node),但是它不是element对象
      

  12.   

    回到老地方再谢谢各位.问题解决了
    现将结果公布:(本结果只在ie下进行过测试)var sel = document.selection.createRange();//创建选中区域
    var rangtype= document.selection.type //得到选中的类型
    var pNode;//声明结点
    if(rangtype.toLowerCase()=="control"){
    pNode=sel.Range(0).parentNode;//若是control应当用parentNode方法获取父级对象
    }else{
    pNode=window.config.NewWin.Selection.Range.parentElement()
    }
    while(pNode.parentElement){
    if(!pNode.tagName)return;
    if(pNode.tagName.toLowerCase()=="body"){return;}
    if(pNode.tagName.toLowerCase()=="p"){break;}
    pNode=pNode.parentElement()
    if(pNode.tagName.toLowerCase()=="body"){return;}
    }
    alert(pNode.innerHTML)如Free_Wind22所说的parentNode 返回的是一个 document 对象.而parentElement 直接返回一个 object 对象.
    现在我们要获取的是页面上不同级别的标签的对象,故要用parentElement;
    while(pNode.parentElement)这句是为了得到是否有parentElement这个属性.
    而pNode=pNode.parentElement()表示要获取pNode的父级对象 当然要先判断是否有属性再获取对象了.