Javascript 按标记名搜索元素中的元素

Javascript 按标记名搜索元素中的元素,javascript,jquery,xml,Javascript,Jquery,Xml,在这个问题上被困了几个小时之后,我想是时候在这个问题上寻求帮助了 处境 我有一个需要过滤和分组的XML文件。我已经设法用:Contains部分对其进行了筛选。我还确定了需要分组的节点(函数getGroups将这些节点返回给我)。现在,我想用过滤后的值创建一个新的XML,并根据返回的键进行分组 代码 var xmlement=document.createElement(“DataElementsCalc”); jQuery(xml).find(“DataElements”+topNodes+fi

在这个问题上被困了几个小时之后,我想是时候在这个问题上寻求帮助了

处境 我有一个需要过滤和分组的XML文件。我已经设法用
: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);
    }
});