我正在尝试向标记添加文字,但我一直收到错误
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> »
<b>Combat level: 20</b> (311855484) <font style='font-size:8px;color:#696156'>+13144516</font>
<BR><BR> »
<b>Troops ready:</b> 100%
<BR> »
<b>Mana:</b> 40 / 40<BR> »
<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> » <b>Total FSP: </b>";
var append2 = "<br> » <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行)。
对不起拖延,我试图弄清楚自己。
答案 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]);