Javascript jQuery XML解析-返回子元素的父元素
我试图在搜索子元素时返回父元素,然后显示并行子元素的文本 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){
第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 );