2012-01-11 83 views
0

如何使用js以alert()方式输出childNode的值;功能或创建一个新的元素。例如..有这样的:在JavaScript中输出childNode值

<ul id="main"> 
    <li> 
    <h2>Alec</h2> 
    <p>NX-01</p> 
    <p>command: 2151</p> 
    </li> 
    <li>simple</li> 
    <li>William</li> 
</ul> 

<script> 
var element = document.getElementById("main"); 
var values = element.childNodes[1].nodeValue; // the text simple this i want to output 
alert('the value is:' + values); 
</script> 

回答

5

您可以使用它innerText属性:

var element = document.getElementById("main"); 
var values = element.childNodes[1].innerText; 
alert('the value is:' + values); 
// Alec NX-01 command: 2151 

上述应打印第一<li>元素的所有文本内容(亚历克NX-01指令:2151)

要进一步缩小,并检索该值Alec例如,使用另一.childNodes[1]

var element = document.getElementById("main"); 
var values = element.childNodes[1].childNodes[1].innerText; 
alert('the value is:' + values); 

// Alec 
+2

两个问题:这将是浏览器之间的不一致,因为IE <9不包括它'childNodes'集合中唯一的空白文本节点,而其他浏览器一样。其次,所有浏览器都不支持'innerText'(Firefox不支持它,一开始)。 – 2012-01-11 22:29:21

+0

......更不用说浏览器对待'innerText'的方式不同。有些保留空白,有些则不。 – 2012-01-11 22:45:25

+0

@MattMcDonald:的确,'textContent'和'innerText'之间也有区别,例如处理“

1

您可以使用innerText而不是nodeValue来获取<li>及其子项中的所有文本。看到这里的工作示例:http://jsfiddle.net/B7Lvd/

2

使用.nodeValue为IE和.textContent为其他浏览器。

0

你可能在寻找这样的:

var values = element.childNodes[1].innerHTML; 
0

使用jQuery将使这个轻松了许多,但与香草的JavaScript你能做到这样。

var element = document.getElementById("main"); 
var values = element.childNodes; 

for(var i in values) { 
    if(values[i].innerHTML == 'simple') { 
     alert('The value is: ' +values[i]); 
    } 
} 

或者你也可以使用值分别访问的孩子[0],值[1]等问题是有点难理解,但我认为这是你在找什么做的。

0

您需要考虑仅包含空白的文本节点。在大多数浏览器中,这些节点在节点的childNodes集合中显示为文本节点,而在IE <中,它们被忽略。因此,您需要检查nodeType属性,同时通过childNodes进行迭代。此外,nodeValue不会为您提供您感兴趣的<li>元素中的文本:您需要使用DOM标准textContent属性(回落到不支持textContent的浏览器中的类似innerText属性)。

function getChildElement(element, index) { 
    var elementCount = 0; 
    var child = element.firstChild; 

    while (child) { 
     if (child.nodeType == 1) { // Node with nodeType 1 is an Element 
      if (elementCount == index) { 
       return child; 
      } 
      elementCount++; 
     } 
     child = child.nextSibling; 
    } 
} 

var element = document.getElementById("main"); 
var child = getChildElement(element, 1); 
var text = child.textContent || child.innerText; 
alert("Found element with text " + text);