问一个JS的简单问题

zj_2009 2007-12-24 01:11:45
有一个HTML代码是这样的<p id="test">前面<div><div>测试</div></div></p>
,

我想取出id为"test"的内容。也就是取出
前面<div><div>测试</div></div>
,

我用innerHTML只能取到“前面”,而“测试”却取不到,

用outerHTML也只能取到"<p id="test">前面"

这该如何办呢?
...全文
75 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2007-12-24
  • 打赏
  • 举报
回复
P不是html元素? 呵呵,这句说话的... 我都不知道说什么好了.
zj_2009 2007-12-24
  • 打赏
  • 举报
回复
好了,问题解决,

因为P不是HTML元素, 用INNERHTML这样的方法取不到《P》候面的值。
fcuandy 2007-12-24
  • 打赏
  • 举报
回复
这个不是js的问题.
dhtml手册里对于p标记,提供的有childnode的属性及相关集合.
但经测试发现问题,p 标记无法含子标签.

用canHaveHTML属性得到true,即p元素可以含子html元素,但事实发现,是假的.

<script>
function answer(arg) {
arg ? alert("Yes") : alert("No");
}
</script>
<p id="test">前面<div id="d1"><div id="d2">测试</div></div></p>
<script>
answer(document.getElementById("test").canHaveHTML);//true
alert(document.getElementById("test").outerHTML);//<p id="test">前面
alert(document.getElementById("test").childNodes.length);//1 ,有一个子元素,是否为d1呢
alert(document.getElementById("test").childNodes[0].childNodes.length);//1 ,如果上面指的是d1,那么这里应该也得到1,即d1有一个子元素d2,但这里得到0
//那么 test.childNodes[0],即 p id="test"的子元素指的是哪个呢
alert(document.getElementById("test").childNodes[0].id);//undefined 很明显不是d1,也不是d2,否则 不会是undefined
alert(document.getElementById("test").childNodes[0].tagName);//undefined 更加确定不是d1,也不是d2. 否则会弹出 "DIV"
//接着就怀疑,test的这个childnode指的就是这两个字"前面"
//将前面二字删除,继续alert test.childnodes.length已经是0了。 真相大白了

</script>


除了用脚本调用idocument接口测试外,我们再看html呈现

<p>asdfasdfasdf</p>
<p style="line-height: 350%">asdfasdfasdf<br/><div>asdfasdfasdf<br/>asdfasdf</div></p>
<p>asdfasdfasdf</p>
<p> </p>


第二个p标记设了行距350%, 如果里面没有含div, 那么按照br换行后,这三行都有350%的行距, 加上div, div内的行距无效,即说明, div不能成为p的子标签.

也即得出结论, p是支持含html元素(比如br)为子的,但不支持div做为子标签,至于哪些支持,哪些不支持,只有自己测试了.

symbol441 2007-12-24
  • 打赏
  • 举报
回复
楼主把页面显示的HTML代码发
zj_2009 2007-12-24
  • 打赏
  • 举报
回复
<P style="color: #000; font-size: 14px" id="c_55">
I Support Your Perspective<div class=textDiv><div class=contentDiv>这还是我说的</div></div>
</P>



上面这个是我从源码里面取出来的,这里好像没有4楼说的那样。
YSEE 2007-12-24
  • 打赏
  • 举报
回复
<p id="test">前面</p><div><div>测试</div></div><p></p>
该成
<p id="test">前面<div><div>测试</div></div></p>
ylf102 2007-12-24
  • 打赏
  • 举报
回复
innerHTML应该是没问题吧。
是不是你其他地方的问题?
Soloboy1020 2007-12-24
  • 打赏
  • 举报
回复
<P>标记不能这么写的,你这种写法在浏览器里面的呈现是
<p id="test">前面</p><div><div>测试</div></div><p></p>

所以用 innerHTML 取不到,换其它的吧
zj_2009 2007-12-24
  • 打赏
  • 举报
回复
innerText 试过, 没用。
ipqxiang 2007-12-24
  • 打赏
  • 举报
回复
innerText
YSEE 2007-12-24
  • 打赏
  • 举报
回复
innerText

62,039

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧