选择DOM javascript中的最后一个元素

时间:2018-08-01 17:38:02

标签: javascript xml

我对这个域是陌生的,我将获得此xml文档的最后一个子域,但无法获得该域,任何人都可以解释为什么我的代码对我而言似乎正确,但是却不知道为什么它没有得到姓氏的消息,那么还有什么其他可能的方法可以实现,我只想从此味精中获取talk 123

xml文件

<msg category="short">
    <person1>
        <time>
             r
            <message>Djssjs</message>
        </time>
    </person1>
    <person2>
        <time>
            r
            <message>1234fdg</message>
        </time>
    </person2>
    <person1>
        <time>
            r
            <message> talk 123</message>
        </time>
    </person1>
</msg>

javascript

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
    var x = xmlDoc.getElementsByTagName("msg")[0].lastChild;
    var m = x.childNodes[2];
    document.getElementById("demo").innerHTML = m.innerHTML;
}

2 个答案:

答案 0 :(得分:1)

我不知道xml的类型是什么...我假设一个包含字符串的对象。

如果我是正确的,则需要使用DOMParser对其进行解析。

然后,我们得到(按顺序):

  1. <msg>标签,
  2. lastElementChild, 这里是<person1>
  3. 最后是<message>标签的innerHTML。

var xml = {
  responseXML: '<msg category="short"> <person1> <time> r <message>Djssjs</message> </time> </person1> <person2> <time> r <message>1234fdg</message> </time> </person2> <person1> <time>  r <message> talk 123</message> </time> </person1> </msg>'
};


function myFunction(xml) {
  
  // Get the response from the object.
  var xmlDoc = xml.responseXML;
  //console.log(xmlDoc);

  // Parse the string to HTML
  var parser = new DOMParser();
  var xmlParsed = parser.parseFromString(xmlDoc, "application/xml");
  //console.log(xmlParsed);

  // Get the <msg> tage
  var msgTag = xmlParsed.getElementsByTagName("msg")[0];
  //console.log(msgTag.tagName);

  // Get the last child, <person1>
  var personLast = msgTag.lastElementChild;
  //console.log(personLast);

  // Get the <msg> innerHTML
  var msgLast = personLast.getElementsByTagName("message")[0].innerHTML;
  //console.log(msgLast);

  // Display in document
  document.getElementById("demo").innerHTML = msgLast;
}

myFunction(xml);
#demo{
  border:1px solid black;
  height:6em;
}
<div id="demo">Function result should be here.</div>

CodePen

中未注释控制台日志

答案 1 :(得分:0)

正如评论中指出的那样,这里可能存在多个问题。不确定XML文档,但javascript会将nextline字符视为最后一个子元素。因此,最后一个孩子将是文字。您可以通过在控制台上登录x进行测试。这应该根据此处的xml修复当前功能。

function myFunction(xml) {
var xmlDoc = xml.responseXML;
var x = xmlDoc.getElementsByTagName("msg")[0].childNodes[childNodes.length-2];
var m = x.childNodes[1].childnodes[1];
document.getElementById("demo").innerHTML = m.innerHTML;

}