文本节点可以有一个子节点,它是一个元素节点吗?

时间:2009-07-10 18:38:13

标签: javascript dom

说,以下是可能的:

textNode.appendChild(elementNode);

elementNode是指nodeType设置为1

的人

textNode是指那些nodeType设置为2

的人

制作起来并不容易。

我问这个的原因是我找到了一个函数,它在引用的末尾添加了一个引用链接:

function displayCitations() {
  var quotes = document.getElementsByTagName("blockquote");
  for (var i=0; i<quotes.length; i++) {
  if (!quotes[i].getAttribute("cite")) continue;
  var url = quotes[i].getAttribute("cite");
  var quoteChildren = quotes[i].getElementsByTagName('*');
  if (quoteChildren.length < 1) continue;
  var elem = quoteChildren[quoteChildren.length - 1];
  var link = document.createElement("a");
  var link_text = document.createTextNode("source");
  link.appendChild(link_text);
  link.setAttribute("href",url);
  var superscript = document.createElement("sup");
  superscript.appendChild(link);
  elem.appendChild(superscript);
  }
}

查看最后一行“elem.appendChild(superscript);”,其中elem可以是textNode

我认为很难证明这一点,因为很难获得对指定textNode的访问权限。有没有人能够实现这一目标?

3 个答案:

答案 0 :(得分:5)

不,文本节点总是叶子。相反,您必须将新节点添加到文本节点的父节点 - 使它们成为文本节点的兄弟节点。

修改

以下是我尝试将子项添加到文本节点的示例。

<div id="test">my only child is this text node</div>

<script type="text/javascript">

var div = document.getElementById( 'test' );
var textNode = div.childNodes[0];
var superscript = document.createElement("sup");
superscript.text = 'test';

textNode.appendChild( superscript );

</script>

Firefox提供了错误

  

未捕获的异常:节点不能   插入在指定的点   等级制度   (NS_ERROR_DOM_HIERARCHY_REQUEST_ERR)

答案 1 :(得分:3)

我不这么认为;我很确定像

这样的东西
<div>this is some <a href="...">text</a> with an element inside it.</div>

最终成为:

<div>
    <textnode/>
    <a>
        <textnode/>
    </a>
    <textnode/>
</div>

我不相信textNodes可以有孩子。

如果我不得不猜测,我认为将一个子节点添加到文本节点的结果是将该元素添加到文本节点的父节点,但我根本没有测试过。

答案 2 :(得分:0)

没有。元素可能包含属性,其他元素或文本。

相关问题