2013-03-11 70 views
0

this对应于特定的div。在div的祖父母后插入行

我想使用此代码的祖父母后,插入了一段代码,但它似乎不工作:this.parentNode[0].parentNode[0].insertAfter(newrespondform);

,如果需要,我可以提供更多的代码,但尝试调试后,我敢URE问题在于这里。 我怎么写它,使其工作?我不能给祖父母添加一个ID来选择它。

感谢你的帮助:)

编辑 - 这里是获取页面加载加载整个代码:

function comrespond(){ 
    function addresform(){ 
    var resid = this.getAttribute('id'), 
    grandParent = this.parentNode.parentNode, 
    newrespondform = '<div class="commentresponse"><span></span><span><p class="author">Leave a reply:</p><form id="commentform" action="http://split.snippetspace.com/wp-comments-post.php" method="post" onsubmit="addcomment(); return false;"><input id="author" aria-required="true" name="author" type="text" placeholder="Your name"/><input id="email" aria-required="true" name="email" type="text" placeholder="Email address" /><textarea id="comment" aria-required="true" name="comment" rows="8"></textarea><input id="submit" name="submit" type="submit" value="Post Comment" /><input id="comment_post_ID" name="comment_post_ID" type="hidden" value="'+resid+'" /></form></span></div>'; 
    grandParent.parentNode.insertBefore(newrespondform, grandParent.nextSibling); 
    } 
    var responsebtn = document.getElementsByClassName('comment-reply-link'); 
    for(var i = 0; i < responsebtn.length; i++){ 
        bindEvt(responsebtn[i], "click", addresform); 
       };} 

的HTML:

<div> 
    <span></span> 
    <span> 
     <p class="author">Christopher</p> 
     <div class="comment-reply-link" id="106"></div> 
     <p>test comment 2 to see if it increments!</p> 
    </span> 
</div> 
+0

一个元素只能有一个父元素,所以'parentNode'永远不是一个数组。也没有'insertAfter()'函数。有一个'insertBefore()'需要两个参数。 – Amberlamps 2013-03-11 14:09:35

回答

2

你的代码有几个问题。

首先,属性parentNode仅包含一个节点,而不是一组节点,因此您不需要应用[0]即可获取第一个节点。接下来,在原生JavaScript中没有insertAfter方法。相反,你可以使用insertBefore的技巧。所以解决方案可能如下所示:

var grandParent = this.parentNode.parentNode; 
grandParent.parentNode.insertBefore(newrespondform, grandParent.nextSibling); 
+0

这看起来不错,但在IE10中,最后一行触发'SCRIPT87:无效参数'。现在不能在其他浏览器上尝试,但可能是相同的。有任何想法吗?谢谢你的帮助! – cmplieger 2013-03-11 14:28:01

+0

@SnippetSpace它应该工作正常。看看这里:http://jsfiddle.net/GFeFR/。 – VisioN 2013-03-11 14:33:41

+0

好吧,别的地方一定有什么问题。我已将完整的代码添加到原始帖子中,您可以查看一下吗?抱歉,添麻烦了。 – cmplieger 2013-03-11 14:38:22

0

parentNode不是一个数组,所以刚刚摆脱[0]应该这样做,我认为。

this.parentNode.parentNode.insertAfter(newrespondform);