<script type="text/javascript"> var Lists=document.getElementsByTagName("li"); for (var i=0; i<Lists.length;i++) { var text = Lists[i].getAttribute("title"); document.write(text +"<br>"); if(text=="") { Lists[i].setAttribute("title","WEB前端技术"); document.write(Lists[i].getAttribute("title")+"<br>"); } } </script>
最后的document.wirte()中为什么不能直接写 (text+"<br/>") 而要Lists[i].getAttribute("title")全部写出来,如果全部写出来为什么不是Lists[i].setAttribute("title")
首先,document.wirte()中为什么不能直接写 (text+"<br/>") ?因为,text只在第5行被赋了值,从后text是空格的属性值通过第9行赋了新的属性名和属性值,并没有改变原有位置处text也没有把新值付给新的变量。其次,是Lists[i].getAttribute("title")和Lists[i].setAttribute("title")的区别,前者是得到属性名为“title”中的属性值,而后者是用来设置新的属性名(title)和新的属性值的,document.write()括号里边的必须是可以输出的值,前者是得到了属性值,后者只是设置了属性值并没有发生“得到”这个动作。
我觉得这个事例代码应该是有点问题的
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> </head> <body> <p id="intro">我的课程</p> <ul> <li title="JS">JavaScript</li> <li title="JQ">JQuery</li> <li title="">HTML/CSS</li> <li title="JAVA">JAVA</li> <li title="">PHP</li> </ul> <h1>以下为li列表title的值,当title为空时,新设置值为"WEB前端技术":</h1> <script type="text/javascript"> var Lists=document.getElementsByTagName("li"); for (var i=0; i<Lists.length;i++) { var text=Lists[i].getAttribute("title"); if(text=="") { Lists[i].setAttribute("title","WEB前端技术"); } document.write(Lists[i].getAttribute('title')+"<br>") } </script> </body> </html>
set是设置属性值,get是获取属性值,因为text这个变量是在set之前定义的,text不会因为set而发生变化,text依然是空的,所以这时候要用Lists[i].getAttribute("title")全部写出来。