JavaScript取HTML DOM一个元素的前一个元素引出的问题
2010-08-13 17:03
585 查看
朋友“小平的
fans
”和我讨论一个问题,他发一个文件给我,说
JavaScript
不能取到一个元素的前一个元素。
test.html
代码如下
<!
DOCTYPE
html
PUBLIC
"-//W3C//DTD XHTML
1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
>
<
html
>
<
head
>
<
title
>
test
</
title
>
<
script
type
=
"text/javascript"
>
function
f(){
var
sub =
document.getElementById(
"ME-26934"
);
sub = sub.previousSibling;
alert(sub
.getAttribute(
"id"
)
);
}
</
script
>
</
head
>
<
body
onload
=
"f();"
>
<
input
type
=
"text"
id
=
"ME-26933"
value
=
"aaa"
>
dddddd
</
input
>
<
input
type
=
"text"
id
=
"ME-26934"
>
eeee
</
input
>
<
input
type
=
"text"
id
=
"ME-26935"
>
rrr
</
input
>
</
body
>
</
html
>
这个问题我遇到过,
previousSibling
返回元素之前紧随的兄弟节点。
元素后面会有一个文本节点,无论它是不是含有文本。所以这里的脚本应修改
sub = sub
.previousSibling
.previousSibling;
alert(sub.getAttribute(
"id"
));
我用的
FireFox3.6
,试了下,可以了,就发给朋友。
过了一会儿他回复说,
IE6
下还是不行,输出(
alert
)了空字符串。
我实验了下,果真不行,看不出来出了什么问题。
sub =
sub.previousSibling.previousSibling;
alert(sub.nodeType+
":"
+sub.getAttribute(
"id"
));
IE6
输出的是
1:
1
代表的是元素
element
,这没错啊,取到元素了。
我首先想到的是令人郁闷的浏览器差异,惯性的想是不是方法兼容问题。
于是试着换了几个方法、属性,结果都不行。
正卡壳,忽然想到干嘛这么毫无逻辑的瞎猜,既然有输出(虽然是空字符串),那么方法是可用的,可能是取错了。
alert(sub.nodeType+
":"
+sub.tagName);
IE6
下输出的是
1:/INPUT
发现问题了!
<
input
type
=
"text"
id
=
"ME-26933"
value
=
"aaa"
>
dddddd
</
input
>
IE6
下这种书写格式,同级节点分别是:
<input>
元素、
</input>
元素
、文本节点。
FireFox3.6
下
<input>
元素
&</input>
元素算一个元素。
如此,问题迎刃而解。整理后的文档如下:
test.html
文件
<!
DOCTYPE
html
PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
>
<
html
>
<
head
>
<
title
>
test
</
title
>
<
script
type
=
"text/javascript"
>
function
f(){
var
sub =
document.getElementById(
"ME-26934"
);
sub = sub.previousSibling.previousSibling;
alert(sub.nodeType+
":"
+sub.tagName+
":"
+sub.getAttribute(
"id"
));
var
sub1 =
document.getElementById(
"ME-26935"
);
sub1 =
sub1.previousSibling.previousSibling;
alert(sub1.nodeType+
":"
+sub1.tagName);
}
</
script
>
</
head
>
<
body
onload
=
"f();"
>
<
input
type
=
"text"
id
=
"ME-26933
"
value
=
"aaa"
/>
dddddd
<
input
type
=
"text"
id
=
"ME-26934"
>
eeee
</
input
>
<
input
type
=
"text"
id
=
"ME-26935"
>
rrr
</
input
>
</
body
>
</
html
>
第一个
alert
:
1:INPUT:
ME-26933
第二个
alert
:
1:/INPUT
小结:
1.
<
input
type
=
"text"
id
=
"ME-26933"
value
=
"aaa"
>
dddddd
</
input
>
IE6
下这种书写格式,同级节点分别是:
<input>
元素、
</input>
元素、文本节点。
2.
分析问题要条理清晰,步步为营,而不是“投机式”的试错,虽然有些时候“投机式”方法能够快速的解决问题,但分析问题就不太适用了,什么问题用什么方法。
fans
”和我讨论一个问题,他发一个文件给我,说
JavaScript
不能取到一个元素的前一个元素。
test.html
代码如下
<!
DOCTYPE
html
PUBLIC
"-//W3C//DTD XHTML
1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
>
<
html
>
<
head
>
<
title
>
test
</
title
>
<
script
type
=
"text/javascript"
>
function
f(){
var
sub =
document.getElementById(
"ME-26934"
);
sub = sub.previousSibling;
alert(sub
.getAttribute(
"id"
)
);
}
</
script
>
</
head
>
<
body
onload
=
"f();"
>
<
input
type
=
"text"
id
=
"ME-26933"
value
=
"aaa"
>
dddddd
</
input
>
<
input
type
=
"text"
id
=
"ME-26934"
>
eeee
</
input
>
<
input
type
=
"text"
id
=
"ME-26935"
>
rrr
</
input
>
</
body
>
</
html
>
这个问题我遇到过,
previousSibling
返回元素之前紧随的兄弟节点。
元素后面会有一个文本节点,无论它是不是含有文本。所以这里的脚本应修改
sub = sub
.previousSibling
.previousSibling;
alert(sub.getAttribute(
"id"
));
我用的
FireFox3.6
,试了下,可以了,就发给朋友。
过了一会儿他回复说,
IE6
下还是不行,输出(
alert
)了空字符串。
我实验了下,果真不行,看不出来出了什么问题。
sub =
sub.previousSibling.previousSibling;
alert(sub.nodeType+
":"
+sub.getAttribute(
"id"
));
IE6
输出的是
1:
1
代表的是元素
element
,这没错啊,取到元素了。
我首先想到的是令人郁闷的浏览器差异,惯性的想是不是方法兼容问题。
于是试着换了几个方法、属性,结果都不行。
正卡壳,忽然想到干嘛这么毫无逻辑的瞎猜,既然有输出(虽然是空字符串),那么方法是可用的,可能是取错了。
alert(sub.nodeType+
":"
+sub.tagName);
IE6
下输出的是
1:/INPUT
发现问题了!
<
input
type
=
"text"
id
=
"ME-26933"
value
=
"aaa"
>
dddddd
</
input
>
IE6
下这种书写格式,同级节点分别是:
<input>
元素、
</input>
元素
、文本节点。
FireFox3.6
下
<input>
元素
&</input>
元素算一个元素。
如此,问题迎刃而解。整理后的文档如下:
test.html
文件
<!
DOCTYPE
html
PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
>
<
html
>
<
head
>
<
title
>
test
</
title
>
<
script
type
=
"text/javascript"
>
function
f(){
var
sub =
document.getElementById(
"ME-26934"
);
sub = sub.previousSibling.previousSibling;
alert(sub.nodeType+
":"
+sub.tagName+
":"
+sub.getAttribute(
"id"
));
var
sub1 =
document.getElementById(
"ME-26935"
);
sub1 =
sub1.previousSibling.previousSibling;
alert(sub1.nodeType+
":"
+sub1.tagName);
}
</
script
>
</
head
>
<
body
onload
=
"f();"
>
<
input
type
=
"text"
id
=
"ME-26933
"
value
=
"aaa"
/>
dddddd
<
input
type
=
"text"
id
=
"ME-26934"
>
eeee
</
input
>
<
input
type
=
"text"
id
=
"ME-26935"
>
rrr
</
input
>
</
body
>
</
html
>
第一个
alert
:
1:INPUT:
ME-26933
第二个
alert
:
1:/INPUT
小结:
1.
<
input
type
=
"text"
id
=
"ME-26933"
value
=
"aaa"
>
dddddd
</
input
>
IE6
下这种书写格式,同级节点分别是:
<input>
元素、
</input>
元素、文本节点。
2.
分析问题要条理清晰,步步为营,而不是“投机式”的试错,虽然有些时候“投机式”方法能够快速的解决问题,但分析问题就不太适用了,什么问题用什么方法。
相关文章推荐
- javascript关于parseInt("08")返回0的一个常识问题
- javascript 删除某一个元素下面所有节点
- 每天一个JavaScript实例-铺货鼠标点击位置并将元素移动到该位置
- Javascript中的线程以及获取动态Dom元素的问题
- [Java]一个TCP文本上传相关的异常处理和偶然引出的中文编码问题
- 由一个性能问题引出的.net概念
- javascript从数组中删除一个元素
- boj 1347 简单数组问题 在一个二维数组中 a[i][j]=a[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1] 则a[i][j]为i j位置左上侧所有元素之和
- javascript下一种表单元素获取方法存在的问题
- 两种隐藏元素方式【display: none】和【visibility: hidden】的区别及由此引出的问题
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- 浮动元素之间注释,导致多复制一个文字问题
- OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法
- 一个JavaScript获取元素当前高度的实例
- 高程笔记-总结从javascript内存空间引出的1mol多问题
- 每天一个JavaScript实例-铺货鼠标点击位置并将元素移动到该位置
- javascript判断一个元素是另外一个元素的子元素
- “无法更新EntitySet“*****”,因为它有一个DefiningQuery,而元素中没有支持当前操作的元素”问题的解决方法
- 求一个数组,n个元素的不同组合(排列组合问题)
- JavaScript获取HTML DOM节点元素的方法的总结