如何使用insertBefore添加新元素?

时间:2013-02-17 15:43:23

标签: javascript

我正在尝试向标记添加文字,但我一直收到错误

NOT_FOUND_ERR: DOM Exception 8
Error: An attempt was made to reference a Node in a context where it does not exist.

这是javascript:

var getexp = document.getElementsByTagName("td")[219];
few lines of code here...
var fsptag = document.createElement('text');
fsptag.innerHTML = append1 +fspRound +append2 +ratioRound;

var fsptext = fsptag.innerHTML;
fsptag.appendChild(fsptext);
getexp.insertBefore(fsptag,getexp.childNodes[10]);

我是新手(仅仅几天)。据我所知,getexp.childNodes[10]应该是getexp的子节点。它是一个子节点。 任何帮助在这里将不胜感激。感谢。

编辑:HTML

<td colspan=2>&nbsp;&raquo;&nbsp;
<b>Combat level: 20</b> (311855484)&nbsp;<font style='font-size:8px;color:#696156'>+13144516</font>
<BR><BR>&nbsp;&raquo;&nbsp;
<b>Troops ready:</b> 100% 
<BR>&nbsp;&raquo;&nbsp;
<b>Mana:</b> 40 / 40<BR>&nbsp;&raquo;&nbsp;
<b>Location:</b> <a href=map.php?cx=50&cy=50>Empire Capital</a>
<BR><BR><BR><BR><BR>
<center><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="460" height="54" id="showarmy" align="middle">

HTML看起来像这样。它来自此处(http://www.lordswm.com/pl_info.php?id=2255),位于第204行的源代码中。

编辑:

var append1 = "<br><br>&nbsp;&raquo;&nbsp;<b>Total FSP: </b>";
var append2 = "<br>&nbsp;&raquo;&nbsp;<b>Ratio: </b>";
var fsptag = document.createElement('text');
fsptag.innerHTML = append1 +fspRound +append2 +ratioRound;       //fspRound & ratioRound are numbers

然后当我使用它时:getexp.appendChild(fsptag);附加文本(html?)在最后创建,即在<object>之后(html代码中的最后一行)。我希望它出现在5个<br>标签之间(html代码的第8行)。 对不起拖延,我试图弄清楚自己。

1 个答案:

答案 0 :(得分:3)

createElement(tag_name)创建由tag_name定义的HTML元素。 Afaik,<text>只能出现在<svg>内。您的目的是创建自定义HTML标记吗?如果是这样,你需要使用其他名称。

appendChild()元素作为参数,而不是字符串。此外,当一个元素被追加时,它会从它的原始位置移开,即appendChild的参数中使用的变量值变为null。这意味着,如果要两次插入新元素,则必须在重新插入之前重新创建它。

在现代浏览器中,childNodes集合还包含标记之间的空格和换行符,因此您可能需要重新计算insertBefore()的索引。


修改

编辑完帖后,更容易理解。我为你存储了一个简化的fiddle。它可能接近你需要的东西吗?

小提琴中的基本代码是这样的:

var getexp = document.getElementsByTagName("td")[219];
var fsptag = document.createElement('div');
fsptag.innerHTML = append1 + fspRound + append2 + ratioRound;
getexp.insertBefore(fsptag, getexp.childNodes[10]);