3

请耐心等待这个问题;我最近才开始使用 Javascript 进行编码,因此我希望在进入 jQuery 之前打下坚实的基础。

我有以下 Javascript 代码:

var app = {
  text: document.getElementById('text'),
  output: document.getElementById('output'),
  createDiv: document.createElement('div')
};

function postData(){
  app.output[0].appendChild(app.createDiv.firstChild);
  app.createDiv.classname = 'text';
  document.getElementsByClassName('username').innerHTML += app.text.value;
}

onClick 我希望 app.text 的值在输出 div 上方打印(使用 innerHTML)。有什么想法或问题吗?抱歉,如果我含糊不清或没有意义,我已经盯着这个看了 4 个小时,可能只是筋疲力尽了!

4

2 回答 2

2

我不确定您在问什么,但我发现您的代码存在以下问题:

  • app.output[0]: 应该没有[0],app.output已经是一个元素(你通过 id 得到它)。所以使用app.output.appendChild(app.createDiv.firstChild);. 不过,这没有任何意义。正如 Barmar 所说,你刚刚创建了那个 div,所以那时它没有任何孩子。

  • app.createDiv.classname: 应该className

  • document.getElementsByClassName('username').innerHTML:这会返回多个元素,也许你想要document.getElementsByClassName('username')[0].innerHTML

于 2013-08-16T19:45:21.830 回答
2

您必须创建一个文本节点并将其插入到 NodeList 返回的每个元素之前document.getElementsByClassName

var node = document.createTextNode(app.text.value);
var elements = document.getElementsByClassName('username');

for (var i = 0; i < elements.length; i++) {
    var elem = elements[i];
    elem.parentNode.insertBefore(node.cloneNode(), elem)
}

只是为了用 jQuery 版本来诱惑你:

$('.username').before(app.text.value);
于 2013-08-16T19:48:56.190 回答