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

近日处理一个客户的系统,使用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>

--------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值