解决 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> --------------
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> --------------
相关文章推荐
- 解决IE中无法用jquery解析xml使用find的问题
- MyEclipse中ctrl+F组合解决find查询相关问题
- HibernateDaoSupport的getHibernateTemplate.find()方法带参查询返回结果是nul问题解决
- jquery attr 设定src中含有&(宏)符号的问题解决
- jquery attr 设定src中含有&(宏)符号的问题解决
- jquery attr 设定src中含有&(宏)符号问题的解决方法
- 解决使用Hibernate QBC复合查询含有联合主键映射关系实体的问题
- jquery attr 设定src中含有&(宏)符号问题的解决方法
- 解决SQL语句中含有中文字符无法查询问题
- 解决SQL语句中含有中文字符无法查询问题
- SQL查询语句含有单引号的解决方法
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题(非原创,摘自书中)
- oracle新建用户导入scott的表,解决新用户查询scott表时出现表或视图不存在的问题
- Java中解决(extjs或jquery)session过期退出登录问题
- mybatis使用foreach批次插入,解决sequence只查询一次的问题(在此,我只看union all 部分)
- Mybatis的OneToMany,ManyToOne和解决N+1查询问题
- MySQL查询全部数据集结果不一致问题解决方案
- 解决shiro redis 重写sessiondao多次查询Redis问题
- Node.js Cannot find module 'xxx' 问题解决
- [原创]JQuery的autoCompleate插件的使用(内含解决Jquery事件与UpdatePanel互斥的问题,只需要在body中改为如下:<body onload=’load()’></body>即可)