Javascript 按标记名搜索元素中的元素
在这个问题上被困了几个小时之后,我想是时候在这个问题上寻求帮助了 处境 我有一个需要过滤和分组的XML文件。我已经设法用Javascript 按标记名搜索元素中的元素,javascript,jquery,xml,Javascript,Jquery,Xml,在这个问题上被困了几个小时之后,我想是时候在这个问题上寻求帮助了 处境 我有一个需要过滤和分组的XML文件。我已经设法用:Contains部分对其进行了筛选。我还确定了需要分组的节点(函数getGroups将这些节点返回给我)。现在,我想用过滤后的值创建一个新的XML,并根据返回的键进行分组 代码 var xmlement=document.createElement(“DataElementsCalc”); jQuery(xml).find(“DataElements”+topNodes+fi
:Contains
部分对其进行了筛选。我还确定了需要分组的节点(函数getGroups
将这些节点返回给我)。现在,我想用过滤后的值创建一个新的XML,并根据返回的键进行分组
代码
var xmlement=document.createElement(“DataElementsCalc”);
jQuery(xml).find(“DataElements”+topNodes+filter).each(function(){
var datasetemp=this.parentNode;
如果(计算1!=“”)
{
var groupKeys=getGroups(datasetemp,calculation1);
var tempXML=XMLElement;
jQuery(groupKeys).each(函数(键、值){
var tempValue='a'+value.toLowerCase().replace(/\W/g');
if(tempXML.getElementsByTagName(tempValue.length>0)
{
tempXML=tempXML.getElementsByTagName(tempValue);
}
其他的
{
var节点=document.createElement(tempValue);
appendChild(节点);
tempXML=节点;
}
});
var节点=document.createElement(“信息集”);
var x=datasetMP.childNodes;
对于(i=0;i
解释
正如在这种情况下所说的,我已经过滤了XML,并从getGroups
函数中获得了组名。对于这段代码,我还需要解释以下几点:
正在生成为tempValue
a+value.toLowerCase().replace(/\W/g')代码>。之所以这样做是因为我可能将日期输入到组键中。这样,节点名就得到了一个工作名(我在其他方面收到了错误)
- 我想创建一个新的XML,该XML由组分级。如果一个组已经存在,我想在其中创建一个新元素,而不是得到一个同名的新组。(我现在的问题)
tempXML.getElementsByTagName(tempValue).length
返回函数tempXML.getElementsByTagName
不存在的错误。第二:如果我将其更改为document.getElemetsByTagName
,那么在XML文件中会有很多相同的节点
影响
分组效果没有发挥应有的作用。我在我的DataElementsCalc
中得到了一个或一个错误,或许多相同的节点
问题
我怎样才能解决这个问题?如何在特定节点下创建节点(例如,如果在组1和组2下都有组a)
尝试
将不同位置上的
tempXML
更改为document
(无论是否同时更改所有getElementsByTagName)。寻找另一种方法来创建更易于处理的XML(尚未找到)正如我在问题的评论中提到的:
我在源代码中也没有看到这方面的任何内容(也许这就是它不起作用的原因??)
我试图将xmlement
放入我网页上的现有元素中(如下所示:
var XMLElement = document.createElement("DataElementsCalc");
jQuery('.basicData').append(XMLElement);
其中basicData是现有元素的一个类)
现在我确实得到了一个列表,其中列出了我想要的组上的所有元素
最终版本
var xmlement=jQuery(“”);
jQuery('.basicData').append(xmlement);
jQuery(xml).find(“DataElements”+topNodes+filter).each(function()
{
aantalementsTotal++;
var datasetemp=this.parentNode;
如果(计算1!=“”)
{
var groupKeys=getGroups(datasetemp,calculation1);
var tempXML=XMLElement;
var-groupId='';
jQuery(groupKeys).each(函数(键、值){
var tempValue='a'+value.toLowerCase().replace(/\W/g');
groupId+='a'+value.toLowerCase().replace(/\W/g');
if(jQuery(“#”+groupId).length>0)
{
tempXML=jQuery(“#”+groupId);
}
其他的
{
var节点=jQuery(“”);
jQuery(Node).attr('id',groupId);
jQuery(tempXML).append(节点);
tempXML=节点;
}
});
var节点=jQuery(“”);
var x=datasetMP.childNodes;
对于(i=0;i
由于使用jQuery,请将所有代码更改为jQuery。这将大大减少行数,更容易调试等@LShetty我可以尝试这样做,但正如我现在看到的,这将使我的任务更加困难。在jquery中添加元素的部分立即是追加。现在至少它看起来像一个泛型元素。对此有什么建议吗?jQuery只不过是javascript。两者的工作方式完全相同!我知道JQuery只不过是javascript,但它也是另一种方式吗?我可以用JQuery做所有我可以用Javascript做的事情吗。例如,正如我在创建元素时所理解的,在JQuery中,我立即需要设置一个放置它的位置。据我所知,我在代码中没有这样做。我在源代码中也没有看到这方面的任何内容(可能这就是它不起作用的原因??)@lshetty当创建一个元素时,在JQuery中,我需要立即设置一个放置它的位置。不,不需要<代码>变量$elem=$(“”)var XMLElement = document.createElement("DataElementsCalc");
jQuery('.basicData').append(XMLElement);
var XMLElement = jQuery("<DataElementsCalc/>");
jQuery('.basicData').append(XMLElement);
jQuery(xml).find("DataElements " + topNodes + filter).each( function()
{
aantalElementsTotal++;
var dataSetTemp = this.parentNode;
if(calculation1 != "")
{
var groupKeys = getGroups(dataSetTemp,calculation1);
var tempXML = XMLElement;
var groupId = '';
jQuery(groupKeys).each(function (key,value) {
var tempValue = 'a' + value.toLowerCase().replace(/\W/g, '');
groupId += 'a' + value.toLowerCase().replace(/\W/g, '');
if(jQuery("#" + groupId).length > 0)
{
tempXML = jQuery("#" + groupId);
}
else
{
var Node = jQuery("<"+tempValue+"/>");
jQuery(Node).attr('id', groupId);
jQuery(tempXML).append(Node);
tempXML = Node;
}
});
var Node = jQuery("<InfoSet/>");
var x = dataSetTemp.childNodes;
for (i=0; i < x.length; i++)
{
if(x[i].nodeType == 1)
{
var tempElement = jQuery("<"+x[i].nodeName+"/>");
jQuery(tempElement).text(x[i].childNodes[0].nodeValue);
jQuery(Node).append(tempElement);
}
}
jQuery(tempXML).append(Node);
}
});