2010-07-20 132 views
1

我正在试验一个将节点填充到某个位置的Javascript函数。类似appendChild(document.getElementById("foo"))。但是,我没有完全控制周围的代码,并且可能某些元素具有相同的ID。考虑以下几点:基于位置获取基于Javascript元素的元素节点

<div id="foo"> 
<span id = "bar">456</span> 
<script type="text/javascript">document.write(document.getElementById("bar").innerText);</script> 
</div> 

<hr> 

<div id="foo"> 
<span id = "bar">123</span> 
<script type="text/javascript">document.write(document.getElementById("bar").innerText);</script> 
</div> 

在大多数浏览器,输出将是:

456 456 
123 456 

,而不是我想要的东西,这是

456 456 
123 123 

这个结果是完全不足为奇给我;我明白为什么会发生这种情况。我希望我可以做一个javascript调用更像

document.write(myscriptnode.parent.childnodes['bar'].innerText) 

假设我没有控制权,除了脚本标记内容什么,有没有办法做到这一点?

回答

0

如何使用像jQuery这样的JavaScript库,它允许您编写getElementById的CSS-selector-like-syntax insead,并且还有像parent()这样有用的辅助方法。

http://jquery.com/

+0

div和span没有CSS。我不能添加它们,因为我是“假设我无法控制除脚本标记内容之外的任何内容”。 – Brian 2010-07-20 14:19:24

+0

对不起,澄清一下,我应该说“jQuery允许您编写类似CSS的选择器语法”。请参阅http://api.jquery.com/category/selectors/ jQuery将执行您所需的操作,即node.parent()。children()...请参阅http://api.jquery.com/category/遍历/ 另一个JS框架,你可以看看是http://www.prototypejs.org/ – TimS 2010-07-20 14:32:08

+0

@TimS:这并不告诉我我应该如何选择节点。我没有看到任何让我选择脚本节点的选择器。 – Brian 2010-07-20 14:42:47

0

这里是解决这个问题的一个非常可怕的方式:而不是试图获取当前节点上,创建具有任意ID一个新的节点,然后将其删除完成时。

<div id="foo"> 
<span id = "bar">456</span> 
<script type="text/javascript"> 
    document.write('<span id = "bfrogtmp"></span>'); 
    var y = document.getElementById("bfrogtmp"); 
    document.write(y.parentNode.children['bar'].innerHTML); 
    y.parentNode.removeChild(y); 
</script> 
</div> 

<hr> 

<div id="foo"> 
<span id = "bar">123</span> 
<script type="text/javascript"> 
    document.write('<span id = "bfrogtmp"></span>'); 
    var y = document.getElementById("bfrogtmp"); 
    document.write(y.parentNode.children['bar'].innerHTML); 
    y.parentNode.removeChild(y); 
</script> 
</div>