如何让document.write()脚本生成与原<a>标签一致的结果?
问题修复方案
问题根源
你直接把DOM元素(page_list[i]是<a>元素对象)和字符串拼接时,JavaScript会自动调用元素的toString()方法,输出结果是[object HTMLAnchorElement],而非你需要的链接HTML内容,这才导致生成的列表和原列表不一致。
修复方法
方法1:使用元素的outerHTML属性
outerHTML会返回元素的完整HTML代码,直接拼接该属性值即可得到正确的链接结构:
<ul> <script> var page_list = document.querySelectorAll('a'); var i = 0; while(i < page_list.length){ document.write('<li>' + page_list[i].outerHTML + '</li>'); i = i + 1; } </script> </ul>
方法2:创建DOM元素并追加(更规范)
document.write在页面加载完成后使用会覆盖整个页面,更稳妥的做法是创建元素并添加到目标列表中:
<ul id="dynamic-list"></ul> <script> var page_list = document.querySelectorAll('a'); var targetList = document.getElementById('dynamic-list'); for(var i = 0; i < page_list.length; i++){ var li = document.createElement('li'); // 复制原链接元素,避免移动原页面中的元素 li.appendChild(page_list[i].cloneNode(true)); targetList.appendChild(li); } </script>
额外提示
原代码里的document.write(page_list[1])会在列表外额外输出无效内容,不需要的话可以直接删除。另外原静态列表里存在拼写错误:Automorive Design应为Automotive Design,可顺手修正。
内容的提问来源于stack exchange,提问作者Null301
相关产品推荐
相关产品推荐

