在逐层次获取 range对象的父对象 的时候 出现了错误 没人回答么?Range和html 上的object可以互相转换么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 例子:Object.getAbsoluteTop = function(obj){ var top = 0; while(obj.tagName != "body"){ top = obj.offsetTop; if(obj.parent){//判断一下是否有空 obj = obj.parent; }else{ break; } } return top; } sel.parentElement() && sel.parentElement().tagName.toLowerCase()!="body" === >sel.parentElement && sel.parentElement().tagName.toLowerCase()!="body" 应该是这样写条件吧。 我查了一下文档。var sel = content.document.selection.createRange();//选种区域的对象createRange()返回的是TextRange 对象,就是选中部分。例如:<div>132</div> 选中的是div是的123 这是sel是123而不是123的DIV当sel.parentElement()得到是是123的父对象也就是div。。 我在逐级别获得parentElement的时候就出错了 parentElement是一个属性,你好像把它当方法用了... parentNode是一个属性,而parentElement是一个方法。 是属性还是方法 都是有返回值的。都是返回object节点 我就纳闷.parentElement为什么有错误 parentNode Property: Retrieves the parent object in the document hierarchy. parentElement Property:Retrieves the parent object in the object hierarchy. <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> Free_Wind22 谢谢你.你给我上了一课.要不是你,我还真没注意他们的区别~! 第一点parentElement是ie专用的,就是说在firefox(ff)浏览器里是不能使用的,一般情况parentNode可以取代parentElement的所有功能。第二点就如名字所说,parentElement匹配的是parent为element的情况,而parentNode匹配的则是parent为node的情况。element是包含在node里的,它的nodeType是一,以上是我的猜测,下面是我做的测试。"document"节点(node),但是它不是element对象 回到老地方再谢谢各位.问题解决了现将结果公布:(本结果只在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的父级对象 当然要先判断是否有属性再获取对象了. 求教关于字符串匹配的问题 如何输出 alert("\upload\"); js怎么调用asp从数据库获得数据? 关于ext的页面布局问题,请高手帮下忙,谢谢! 如何在提交前判断一组单选按钮是否被选择? 谁能帮我看看我的代码嘛??我按视频教学写的,可有问题啊!555急问! 求简单左侧菜单!!! 请大家指点 做一个网页,其中一个链接的功能是在浏览网页的客户端打开WORD!!! 再请教:就用marquee这个标签有没有可能把滚动条弄出来呢? 为什么str长度大于0也不进入下一个if? 提交表单用AJAX判断用户名是否注册过的问题
Object.getAbsoluteTop = function(obj){
var top = 0;
while(obj.tagName != "body"){
top = obj.offsetTop;
if(obj.parent){//判断一下是否有空
obj = obj.parent;
}else{
break;
}
}
return top;
}
sel.parentElement && sel.parentElement().tagName.toLowerCase()!="body" 应该是这样写条件吧。
var sel = content.document.selection.createRange();//选种区域的对象
createRange()返回的是TextRange 对象,就是选中部分。
例如:<div>132</div> 选中的是div是的123 这是sel是123而不是123的DIV
当sel.parentElement()得到是是123的父对象也就是div。。
parentNode是一个属性,而parentElement是一个方法。
都是返回object节点
我就纳闷.parentElement为什么有错误
parentElement Property:Retrieves the parent object in the object hierarchy.
<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>
现将结果公布:(本结果只在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的父级对象 当然要先判断是否有属性再获取对象了.