用createElement创建元素遇到问题,大侠们帮忙看一下

想创建一个简称和全称的列表,js代码没反应,大侠们帮忙看一下,多谢!!

<!DOCTYPE html>
<html >
<head>
  <meta charset="utf-8" />
  <scriptsrc="scripts/hi.js"></script>
</head>
<body>
       <p>Portland, <abbr title="Oregon">OR</abbr></p>
       <p>Seattle, <abbr title="Washington">WA</abbr></p>
       <p>Sacramento, <abbr title="California">CA</abbr></p>
</body>
</html>

下面是对应的JavaScript代码..............................

function xx()
{
    var e1=document.getElementsByTagName("abbr");
    var a1=e1[0].getAttribute("title");
    var t1=e1[0].innerHTML;
    for(var i=0;i<e1.length;i++){
        e2=document.createElement("h3");
        e3=document.createElement("p");
        e2.innerHTML="t1";
        e3.innerHTML="a1";
        body.insertBefore(e2,e3);
        body.appendChild(e2);
    }
}
window.onload=xx;

下图是期望结果:

图片描述

阅读 3.2k
2 个回答

function xx()
{var e1=document.getElementsByTagName("abbr");
for(var i=0;i<e1.length;i++)
{var a1=e1[i].getAttribute("title");//应该从函数外面挪进来,并且e1[i]
var t1=e1[i].innerHTML;//应该从函数外面挪进来,并且e1[i]
e2=document.createElement("h3");
e3=document.createElement("p");
e2.innerHTML=t1;//去掉引号
e3.innerHTML=a1;//去掉引号
document.body.appendChild(e3); //必须先安顿好e3,在安顿e2
document.body.insertBefore(e2,e3);
}

}
window.onload=xx;

花了点时间理解你的意图,不得不说你的变量命名实在是太 乱 了!
所以虽然看你自己解决了问题,我还是决定贴上来

window.addEventListener('load', function(){
    var elements=document.getElementsByTagName("abbr");
    for(var i=0;i<elements.length;i++){
        var full=document.createElement("h3");
        var abbr=document.createElement("p");
        full.innerHTML=elements[i].getAttribute('title');
        abbr.innerHTML=elements[i].innerHTML;
        document.body.appendChild(abbr);
        document.body.appendChild(full); //既然你本质上是顺序插入, insertBefore毫无意义?
    }
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题