<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>jquery</title>
<style type="text/css">
</style>
</head>
<body>
<div id="div1">
<input type='text' value='3'> 替换成3<!--经测试这里加个br后就可以了,就算现在注释掉,下面的textarea也能找到了<br/>-->
<textarea>123</textarea> 替换成123
<select>
<option value=''>1 </option>
<option value='' selected>2 </option>
<option value=''>3 </option>
</select> 替换成2
</div>
</body>
<script type="text/javascript">
var els=document.getElementsByTagName("*");
var length=els.length;
for(var i=0;i<length;i++) {
var cur=els[i];
if(typeof(cur)!="undefined" && typeof(cur.nodeName)!="undefined") {
switch(cur.nodeName.toUpperCase()) {
case "INPUT":
case "TEXTAREA":
var n=document.createTextNode(cur.value);
cur.parentNode.replaceChild(n,cur);
break;
case "SELECT":
var n=document.createTextNode(cur.options[cur.selectedIndex].text);
cur.parentNode.replaceChild(n,cur);
break;
default:
//alert(cur.nodeName);
break;
}
}
}
</script>
</html>
上面的代码,getElementsByTagName中有textarea,将上面的html中注释去掉后就找不到了
这是什么原因?
点击这里查看注释去掉后的效果
<input type='text' value='3'></input>
但是这样加也不行
<input type='text' value='3'/>或者是干脆去掉input也正常.所以期待高手解说下....
<head>
<title>jquery</title>
<style type="text/css">
</style>
</head>
<body>
<div id="div1">
<input type='text' value='3'> 替换成3<!--经测试这里加个br后就可以了,就算现在注释掉,下面的textarea也能找到了<br/>-->
<textarea>123</textarea> 替换成123
<select>
<option value=''>1 </option>
<option value='' selected>2 </option>
<option value=''>3 </option>
</select> 替换成2
</div>
</body>
<script type="text/javascript">
var els=document.getElementsByTagName("*");
var length=els.length;
for(var i=0;i<length;i++) {
var cur=els[i];
if(cur.type=="textarea")
{
var n=document.createTextNode(cur.value);
cur.parentNode.replaceChild(n,cur);
}
}
</script>
</html>
发代码是不是测试下,关键原因在于getElementsByTagName("*")里面没有textarea不是判断type的问题吧
<script type="text/javascript">
var els=document.getElementsByTagName("*");
var length=els.length;
for(var i=0;i<length;i++) {
var cur=els[i];
if(typeof(cur)!="undefined" && typeof(cur.nodeName)!="undefined") {
alert(cur.nodeName);
}
}
</script>
楼主把
case "INPUT":
break ; //增加
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>jquery</title>
<style type="text/css">
</style>
</head>
<body>
<div id="div1">
<input type='text' value='3'> 替换成3
<textarea>123</textarea> 替换成123
<select>
<option value=''>1 </option>
<option value='' selected>2 </option>
<option value=''>3 </option>
</select> 替换成2
</div>
</body>
<script type="text/javascript">
var els=document.getElementsByTagName("*");
var length=els.length;
for(var i=0;i<length;i++) {
var cur=els[i];
alert(cur.tagName); //完全可以找到textarea
if(typeof(cur)!="undefined" && typeof(cur.nodeName)!="undefined") {
switch(cur.nodeName.toUpperCase()) {
case "INPUT":
break;
case "TEXTAREA":
var n=document.createTextNode(cur.value);
cur.parentNode.replaceChild(n,cur);
break;
case "SELECT":
var n=document.createTextNode(cur.options[cur.selectedIndex].text);
cur.parentNode.replaceChild(n,cur);
break;
default:
//alert(cur.nodeName);
break;
}
}
}
</script>
</html>
*/我在ie8下测试正常
<head>
<title>jquery</title>
<style type="text/css">
</style>
</head>
<body>
<div id="div1">
<input type='text' value='3'/> 替换成3
<textarea>123</textarea> 替换成123
<select>
<option value=''>1 </option>
<option value='' selected>2 </option>
<option value=''>3 </option>
</select> 替换成2
</div>
</body>
<script type="text/javascript">
var els=document.getElementsByTagName("*");
var length=els.length;
for(var i=0;i<length;i++) {
var cur=els[i];
if(typeof(cur)!="undefined" && typeof(cur.nodeName)!="undefined") {
if(cur.nodeName=="TEXTAREA")
{
var n=document.createTextNode(cur.value);
cur.parentNode.replaceChild(n,cur); }
}
}
</script>
</html>
呵呵 睡觉了
你现在运行我上面那个链接试试看有没textarea?
input的时候 由于没加break 他会拿着input与textarea进行比较 ,当然没效果了呵呵
<script type="text/javascript">
var els=document.getElementsByTagName("*");
var length=els.length;
alert("length"+length);
for(var i=0;i<length;i++) {
var cur=els[i];
for(var j=0;j<length;j++)
{
alert(j+" "+els[j].type );
}
alert("第一次"+i);
alert(cur.nodeName);
if(typeof(cur)!="undefined" && typeof(cur.nodeName)!="undefined") {
switch(cur.nodeName.toUpperCase()) {
case "INPUT":alert("第二次"+i);
case "TEXTAREA":alert("第三次"+i);alert(cur.type);
var n=document.createTextNode(cur.value);
cur.parentNode.replaceChild(n,cur);
break;
case "SELECT":alert(cur.nodeName);
var n=document.createTextNode(cur.options[cur.selectedIndex].text);
cur.parentNode.replaceChild(n,cur);
break;
default:
//alert(cur.nodeName);
break;
}
}
}
</script>
也就是XHTML模型,每个标记必须有配套的</TAGname> 出现,所以
因为直接搜索textarea是能找得到的.
通配符*搜索时应该是运行了不同的机制吧.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>jquery</title>
<style type="text/css">
</style>
</head>
<body>
<div id="div1">
<input type='text' value='3'/> 替换成3
<textarea>123</textarea> 替换成123
<select>
<option value=''>1 </option>
<option value='' selected>2 </option> <option value=''>3 </option>
</select> 替换成2
</div>
</body>
<script type="text/javascript">
var els=document.getElementsByTagName("*");
var length=els.length;
for(var i=0;i<length;i++) {
var cur=els[i];
//alert(cur.nodeName);
if(typeof(cur)!="undefined" && typeof(cur.nodeName)!="undefined") {
switch(cur.nodeName.toUpperCase()) {
case "INPUT":
case "TEXTAREA":
i-=1;
var n=document.createTextNode(cur.value);
cur.parentNode.replaceChild(n,cur);
break;
case "SELECT":
i-=1;
var n=document.createTextNode(cur.options[cur.selectedIndex].text);
cur.parentNode.replaceChild(n,cur);
break;
default:
//alert(cur.nodeName);
break;
}
}
}
</script>
</html>果然~~
其实你可以把这个nodelist放在真正的数组里再for就可以了
下面的代码是你想要的结果么?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>jquery</title>
<style type="text/css">
</style>
<script type="text/javascript">
var els=document.getElementsByTagName("*");
var length=els.length;
for(var i=0;i<length;i++) {
var cur=els[i];
if(typeof(cur)!="undefined" && typeof(cur.nodeName)!="undefined") {
switch(cur.nodeName.toUpperCase()) {
case "INPUT":
var n=document.createTextNode(cur.value);
cur.parentNode.replaceChild(n,cur);
break;
case "TEXTAREA":
var n=document.createTextNode(cur.value);
cur.parentNode.replaceChild(n,cur);
break;
case "SELECT":
var n=document.createTextNode(cur.options[cur.selectedIndex].text);
cur.parentNode.replaceChild(n,cur);
break;
default:
//alert(cur.nodeName);
break;
}
}
}
</script></head>
<body>
<div id="div1">
<input type='text' value='3'/> change3
<textarea id="areaOne">123 </textarea>change123
<select id="selectOne">
<option value=''>1 </option>
<option value='' selected>2 </option>
<option value=''>3 </option>
</select> change2
</div>
</body>
</html>