如何使用javascript和dom技术

如何使用javascript和dom技术,javascript,dom,Javascript,Dom,如何使用javascript和dom技术 要使用div childs获取p和span的值?? 这是密码 <html> <head> <script> function afficherTexts(){ var div = document.getElementById("test"); } </script> </head> <body> <div id="test"> <p>2002<

如何使用javascript和dom技术 要使用div childs获取p和span的值?? 这是密码

<html>
<head>
<script>
function afficherTexts(){
var div = document.getElementById("test");
}
</script>
</head>
<body>
<div id="test">
    <p>2002</p>
    <span>Mon texte</span>
    </div>
    <input type=submit value="afficher p"  onClick="afficherTexts()"/>
</body>
</html>

函数afficherTexts(){
var div=document.getElementById(“测试”);
}
2002年

蒙特克斯
使用


如果在p标记中添加id,则可以轻松完成此操作

修改HTML代码:

<div id="test">
    <p id='para'>2002</p>
    <span>Mon texte</span>
    </div>
    <input type=submit value="afficher p"  onClick="afficherTexts()"/>

使用节点而不是innerHTML。使用节点可以区分文本和元素

// reference to first div
var div = document.getElementsByTagName('div')[0];

// reference to first p in first div
var p = div.getElementsByTagName('p')[0];

// get p text using nodes
var pText = p.childNodes[0].nodeValue;

// reference to first span in first div
var span = div.getElementsByTagName('span')[0];

// get span text
var spanText = span.childNodes[0].nodeValue;
使用节点和innerHTML的区别在于,如果您愿意,您可以只获取文本。使用此方法,您可以绕过元素中包含的任何HTML并获取原始文本

HTML

<p>
    2002
    <span>2003</span>
    2004
</p>

2002
2003
2004

Javascript

var pText = "";

for(var i=0,l=p.childNodes.length;i<l;i++) {
    var node = p.childNodes[i];
    // if node is a text node
    if(node.nodeType===3)
        { pText += node.nodeValue.trim(); }
}

// 20022004
window.alert(pText)
var pText=”“;

对于(var i=0,l=p.childNodes.length;i此代码将获取div中每个段落和跨度的值,分别存储:

var testDiv = document.getElementById('test');
var output = {};console.log(testDiv.childNodes);
for (var idx in testDiv.childNodes) {
    var child = testDiv.childNodes[idx];
    switch (child.nodeName) {
        case 'P':
            // fallthrough
        case 'SPAN':
            if (output[child.nodeName]) {
                output[child.nodeName].push(child.innerHTML);
            } else {
                output[child.nodeName] = [child.innerHTML];
            }
            break;
        default:
            // empty
            break;
    }
}

console.log(output);
输出:

v Object {P: Array[1], SPAN: Array[1]}
  v P: Array[1]
      0: "2002"
      length: 1
    > __proto__: Array[0]
  v SPAN: Array[1]
      0: "Mon texte"
      length: 1
    > __proto__: Array[0]
  > __proto__: Object

您考虑过使用jQuery之类的库吗?那么您可以只使用例如
$('div#test p').html()
我想使用getElementById和childs(firstChild…)但是
span
p
没有属性
id
。您只能使用
firstChild
方法获取第一个元素。另一种方法是使用
childNodes
方法……除了
p
(和
span
)元素没有
属性…我想您应该使用
.innerHTML
var pText = "";

for(var i=0,l=p.childNodes.length;i<l;i++) {
    var node = p.childNodes[i];
    // if node is a text node
    if(node.nodeType===3)
        { pText += node.nodeValue.trim(); }
}

// 20022004
window.alert(pText)
var testDiv = document.getElementById('test');
var output = {};console.log(testDiv.childNodes);
for (var idx in testDiv.childNodes) {
    var child = testDiv.childNodes[idx];
    switch (child.nodeName) {
        case 'P':
            // fallthrough
        case 'SPAN':
            if (output[child.nodeName]) {
                output[child.nodeName].push(child.innerHTML);
            } else {
                output[child.nodeName] = [child.innerHTML];
            }
            break;
        default:
            // empty
            break;
    }
}

console.log(output);
v Object {P: Array[1], SPAN: Array[1]}
  v P: Array[1]
      0: "2002"
      length: 1
    > __proto__: Array[0]
  v SPAN: Array[1]
      0: "Mon texte"
      length: 1
    > __proto__: Array[0]
  > __proto__: Object