Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery XML解析-返回子元素的父元素_Javascript_Jquery_Xml - Fatal编程技术网

Javascript jQuery XML解析-返回子元素的父元素

Javascript jQuery XML解析-返回子元素的父元素,javascript,jquery,xml,Javascript,Jquery,Xml,我试图在搜索子元素时返回父元素,然后显示并行子元素的文本 XML: 第1册 1. 第2册 2. 第1册 3. jQuery: $(document).ready(function(){ $.ajax({ type: "GET", url: "xml_file.xml", dataType: "xml", success: parseXml }); }); function parseXml(xml){

我试图在搜索子元素时返回父元素,然后显示并行子元素的文本

XML:


第1册
1.
第2册
2.
第1册
3.
jQuery:

$(document).ready(function(){
    $.ajax({
        type: "GET",
        url: "xml_file.xml",
        dataType: "xml",
        success: parseXml
    });
});

function parseXml(xml){

    var books = $(xml).find('name').filter(function () {
        return $(this).text() === 'Book_1';
    }).parent();

    for(i=0; i<books.length; i++){
        $('#results').text(
            (books[i]).find('id').text()
        );
    }
}
$(文档).ready(函数(){
$.ajax({
键入:“获取”,
url:“xml_file.xml”,
数据类型:“xml”,
成功:parseXml
});
});
函数解析xml(xml){
var books=$(xml).find('name').filter(函数(){
返回$(this).text()=='Book_1';
}).parent();

对于(i=0;i您的xml无效,您缺少一个根节点,
应该是
类似的

<shelf>
    <book>
        <name>Book_1</name>
        <id>1</id>
    </book>
    <book>
        <name>Book_2</name>
        <id>2</id>
    </book>
    <book>
        <name>Book_1</name>
        <id>3</id>
    </book>
</shelf>

为了简洁起见,将xml设置为局部变量

var $xml = $("<books><book><name>Book_1</name><id>1</aid></book><book><name>Book_2</name><id>2</aid></book><book>   <name>Book_1</name><id>3</aid></book></books>")

var searchString = "Book_1";
var matchedBooks = $xml
  .children('book')  /* Get all the books */
  .children('name')  /* And then the names. You could just get the names first, but this will allow you to exclude nodes not inside of a book element  */
  .filter(function(i,v){ return $(v).text() == searchString; })  /* This excludes non matching names. */
  .parent('book');  /* Now we have 2 matching elements, on each, get the parent element */

/* Build the html then append to save DOM interaction speed tax */
var resultHtml = "";
$(matchedBooks).each(function(i, e){
   resultHtml += "<p>" + $(e).find('id').text() + "</p>";
});
$("#results").html( resultHtml );
var$xml=$(“Book\u 11Book\u 22 Book\u 13”)
var searchString=“Book_1”;
var matchedBooks=$xml
.children(“book”)/*获取所有书籍*/
.children('name')/*然后是名称。您可以先获取名称,但这将允许您排除book元素之外的节点*/
.filter(函数(i,v){return$(v).text()==searchString;})/*这不包括不匹配的名称*/
.parent('book');/*现在我们有2个匹配的元素,每个元素上都有父元素*/
/*构建html,然后追加以保存DOM交互速度*/
var resultHtml=“”;
$(匹配手册)。每个功能(即,e){
结果tml+=“”+$(e).find('id').text()+”

”; }); $(“#results”).html(resultHtml);

让我知道这是否回答了您的问题

您可以将xml托管到某个位置,或者提供示例xml的url以供使用…我在原始问题中更新了示例xml。这非常有效,谢谢!
<shelf>
    <book>
        <name>Book_1</name>
        <id>1</id>
    </book>
    <book>
        <name>Book_2</name>
        <id>2</id>
    </book>
    <book>
        <name>Book_1</name>
        <id>3</id>
    </book>
</shelf>
function parseXml(xml){

    var books = $(xml).find('name').filter(function () {
        return $(this).text() === 'Book_1';
    }).parent();

    for(i=0; i<books.length; i++){
        $('#results').append(
            $(books[i]).find('id').text()
        );
    }
}
var $xml = $("<books><book><name>Book_1</name><id>1</aid></book><book><name>Book_2</name><id>2</aid></book><book>   <name>Book_1</name><id>3</aid></book></books>")

var searchString = "Book_1";
var matchedBooks = $xml
  .children('book')  /* Get all the books */
  .children('name')  /* And then the names. You could just get the names first, but this will allow you to exclude nodes not inside of a book element  */
  .filter(function(i,v){ return $(v).text() == searchString; })  /* This excludes non matching names. */
  .parent('book');  /* Now we have 2 matching elements, on each, get the parent element */

/* Build the html then append to save DOM interaction speed tax */
var resultHtml = "";
$(matchedBooks).each(function(i, e){
   resultHtml += "<p>" + $(e).find('id').text() + "</p>";
});
$("#results").html( resultHtml );