gpt4 book ai didi

javascript - 如何替换jquery中的xml节点值

转载 作者:行者123 更新时间:2023-11-30 18:42:26 26 4
gpt4 key购买 nike

这是我的代码,我使用的是 firefox 的 firebug (console.info)

 var productMap = {
"1": "IIR"
};

$(xml).find('ConfigInfo').each(function(){
var pid = $(this).find('productId').text();
$(this).find('productId').text(productMap[pid]);
console.info($(this).find('productId').text());
});

$(xml).find('ConfigInfo').each(function(){
console.info($(this).find('productId').text());
});

我的XML

<list>
<com.abc.db.ConfigInfo>
<cfgId>83</cfgId>
<cfgName>test</cfgName>
<cfgDesc>test</cfgDesc>
<cfgType>test</cfgType>
<fileName>csmclientbenz.xml</fileName>
<absolutePath>../webapps/csm/files//1-105101/csmclientbenz.xml</absolutePath>
<emailAddress>rmargasa@abc.com</emailAddress>
<projectId>1-105101</projectId>
<hostname>benz</hostname>
<createDate>2011-06-15 15:29:55.0 IST</createDate>
<updateDate>2011-06-15 15:29:55.0 IST</updateDate>
<state>1</state>
<productId>1</productId>
</com.abc.db.ConfigInfo>
<com.abc.db.ConfigInfo>
<cfgId>102</cfgId>
<cfgName>cfgname1</cfgName>
<cfgDesc>test</cfgDesc>
<cfgType>test</cfgType>
<fileName>csmclientestilo.xml</fileName>
<absolutePath>../webapps/csm/files//1-105101/csmclientestilo.xml</absolutePath>
<emailAddress>rmargasa@abc.com</emailAddress>
<projectId>1-105101</projectId>
<hostname>estilo</hostname>
<createDate>2011-06-20 18:26:03.0 IST</createDate>
<updateDate>2011-06-20 18:26:03.0 IST</updateDate>
<state>1</state>
<productId>1</productId>
</com.abc.db.ConfigInfo>
</list>

我的jqGrid代码

var xmlDoc = $.parseXML(xml); 
$('#configDiv').empty();
$('<div width="100%">')
.attr('id','configDetailsGrid')
.html('<table id="list1" width="100%"></table>'+
'<div id="gridpager"></div>'+
'</div>')
.appendTo('#configDiv');

var grid = jQuery("#list1");

grid.jqGrid({

datastr : xml,
datatype: 'xmlstring',
colNames:['cfgId','','Name', 'Host', 'Description','Product', 'Type', 'Last Updated Time','Last Updated By',''],
colModel:[
{name:'cfgId',index:'cfgId', width:90, align:"right", hidden:true},
{name:'',index:'', width:15, align:"right",edittype:'checkbox',formatter: "checkbox",editoptions: { value:"True:False"},editable:true,formatoptions: {disabled : false}},
{name:'cfgName',index:'cfgName', width:90, align:"right"},
{name:'hostname',index:'hostname', width:90, align:"right"},
{name:'cfgDesc',index:'cfgDesc', width:90, align:"right"},
{name:'productId',index:'productId', width:60, align:"right"},
{name:'cfgType',index:'cfgType', width:60, align:"right"},
{name:'updateDate',index:'updateDate',sorttype:'Date', width:120, align:"right"},
{name:'emailAddress',index:'emailAddress', width:120, align:"right"},
{name:'absolutePath',index:'absolutePath', width:90, align:"right", hidden:true},
],
pager : '#gridpager',
rowNum:10,
scrollOffset:0,
height: 'auto',

autowidth:true,
viewrecords: true,
gridview: true,
xmlReader: {
root : "list",
row: "com\\.abc\\.db\\.ConfigInfo",
userdata: "userdata",
repeatitems: false
},
onSelectRow: function(id,status){
var rowData = jQuery(this).getRowData(id);
configid = rowData['cfgId'];
configname=rowData['cfgName'];
configdesc=rowData['cfgDesc'];
configenv=rowData['cfgType'];

if(status==true)
{

}

rowChecked=1;
currentrow=id;
},
onCellSelect: function(rowid, index, contents, event) {
if(index==2)
{

$(xmlDoc).find('list com\\.abc\\.db\\.ConfigInfo').each(function()
{
//alert($(this).find('cfgId').text()+" "+configid);
if($(this).find('cfgId').text()==configid)
{
configname=$(this).find('cfgName').text();
configdesc=$(this).find('cfgDesc').text();
configenv=$(this).find('cfgType').text();
filename=$(this).find('fileName').text();
updatedate=$(this).find('updateDate').text();
absolutepath=$(this).find('absolutePath').text();
productname=productMap[$(this).find('productId').text()];
}
});

}
}

});
grid.jqGrid('navGrid','#gridpager',{edit:false,add:false,del:false});

这就是我得到的输出。 我的问题:如何替换 xml 的节点值?

enter image description here

更新了我的解决方案

我用了xml=xml.replace(/<productId>1/g, "<productId>"+productMap['1']);通过添加 /g它取代了我所有的字符串出现。

最佳答案

我假设 xml 是一个字符串。 jQuery 不会更改字符串,它只会更改通过解析它创建的 DOM 表示。每次将字符串传递给 jQuery 时,它都会重新解析它。

您需要保留对 jQuery 创建的对象的引用:

var $xml = $(xml);
// now change it using $xml

如果你想再次“序列化”数据,你有两种可能:

  • 要么使用 outerHTML plugin : xml = $xml.outerHTML();
  • 或者将整个 XML 附加到某个虚拟元素

    var $xml = $('<dummy />').append(xml);

    并在以后使用 xml = $xml.html();

    DEMO

    您还可以在完成处理后附加它,这样这个附加元素就不会破坏您当前的选择器。

更新:

我刚刚看到 jQuery 还提供了 $.parseXML从 1.5 版开始。这也可能有帮助。

关于javascript - 如何替换jquery中的xml节点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6465682/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com