您的位置:首页 > Web前端 > JQuery

解决 jquery find查询中含有单引号的问题

2010-12-16 23:41 120 查看
近日处理一个客户的系统,使用ajax调用sharepoint的webservice接口。
ajax使用jquery当然是最方便的了,jquery.ajax调用后返回的是一个xml对象,或者说是一个xml文件,我们需要的数据就在xml文件中。
但是碰到了一个棘手的问题,在我们查找的项目中,有一个条目的属性值是含有单引号“’”的,例如<z:row ows_title=”today’s work” ows_data=”10” …>

var xmldata = $(datas).find( "book xmldata[ows_title=/"today’s work/"]" );
这样jquery抛出异常,是单引号的问题,在网上找了许久,说可以使用转义符的、使用concat的,但是都报错
var xmldata = $(datas).find( "book xmldata[ows_title=/"today/’s work/"]" );
var xmldata = $(datas).find( "book xmldata[ows_title=concat(/"today/" + /"'/" + /"s work/")]" );
均报错。
通过字符转换的方式看是不行了,所以闪出了修改源数据的想法。
如何修改,其实也是通过debugger;的方式得出的灵感。
xml文件是这样的:
———book.xml—————
<?xml version="1.0" encoding="utf-8"?>
<catalog>
<book format="trade">
<name>Jennifer Government</name>
<author>Max Barry</author>
<price curr="CAD">15.00</price>
<price curr="USD">12.00</price>
</book>
<book format="textbook">
<name>Unity Game Development Essentials</name>
<author>Will Goldstone</author>
<price curr="CAD">52.00</price>
<price curr="USD">45.00</price>
</book>
<book format="textbook">
<name>UNIX Visual QuickPro</name>
<author>Chris Herborth</author>
<price curr="CAD">15.00</price>
<price curr="USD">10.00</price>
<price curr="mycurr">10.00</price>
<xmldata xname="apen's pars" data="1" />
<xmldata xname="pars1" data="2" />
<xmldata xname="pars2" data="3" />
<xmldata xname="pars3" data="4" />
<xmldata xname="pars7" data="5" />
<xmldata xname="pars6" data="6" />
<xmldata xname="pars4" data="7" />
<xmldata xname="apen's pars" data="8" />
<xmldata xname="apen's pars" data="9" />
</book>

<book format="textbook">
<name>Unity Game Development Essentials</name>
<author>Will Goldstone</author>
<price curr="CAD">52.00</price>
</book>
</catalog>

————————
现在看一下我修改后的代码:
———jquery_find.htm—————
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <title>Book Catalog</title> <script type="text/javascript" src="scripts/jquery-1.3.2-vsdoc2.js"></script> <script type="text/javascript">// <![CDATA[ var root = null; $(document).ready( function(){ $.get( "http://localhost/szxnyi/book.xml", function( data ) { //debugger; root = data; $("p#status").text( "Loaded." ); } ); $("#btn_test").click(function(){ $("#xml_text").val(root.xml); //debugger; //debugger; var xmldata = $(root).find( "book xmldata" ); $("#ta_xmldata").val($(xmldata).length); var xname_list = ""; $(xmldata).each(function(){ xname_list += " /n/r" + $(this).attr("xname"); }); $("#ta_xmldata").val($("#ta_xmldata").val() + xname_list); var exp = //'/g; //过滤调单引号(替换成中文格式的单引号,你也可以转成其它你认为合适的字符) var x_root = root.xml.replace(exp, "‘"); //var find_str = "apen's pars"; var find_str = "apen‘s pars"; //通过过滤的xml代码 创建一个xml对象, var xml_obj = new xml(x_root); var xmldata2 = $(xml_obj).find( "book xmldata[xname=/""+find_str+"/"]" ); var xmldata_str = ""; var c = 0; $(xmldata2).each(function(){ c ++; xmldata_str += " /n/r data" + c.toString() + ":" + $(this).attr("data"); }); $("#ta_xmldata").val("找到数目:" + xmldata2.length + xmldata_str); }); } ); // ]]> //创建一个xml文件 function xml(str){ if(window.DOMParser)//firefox内核的浏览器 { var p = new DOMParser(); return p.parseFromString( str, "text/xml" ); } else if( window.ActiveXObject )//ie内核的浏览器 { var doc = new ActiveXObject( "Msxml2.DOMDocument" ); doc.loadXML(str); return doc; } else return false; } </script> </head> <body> <p id="status"> Loading book.xml... </p> <textarea rows="10" cols="100" id="xml_text"></textarea> <br /> <div>find xname="apen's pars"</div> <br /> <textarea rows="10" cols="100" id="ta_xmldata"></textarea> <div id="test_div"></div> <input type="button" id="btn_test" value="test" /> </body> </html> --------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐