2013-06-19 66 views
0

我正在制作单选按钮列表,查看包含单个国家和相关区域的项目列表。下面是我的单选按钮XSLT或JavaScript - 删除重复

<xsl:template match="/"> 
    <div id="filter"> 
     <xsl:call-template name="container" /> 
    </div> 
</xsl:template> 


<xsl:template name="container"> 
    <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row"/>  
     <xsl:for-each select="$Rows"> 
     <xsl:call-template name="group-items"/> 
     </xsl:for-each>  
</xsl:template> 

<xsl:template name="group-items">  
    <label class="region-filter-item" region="{@Region}"> 
    <input type="radio" name="region" class="regionbox"> 
     <xsl:value-of select="@Region"/> 
    </input> 
    </label>  

这将产生正确的数据,但它也复制该地区许多,因为如果有15个国家在一个区域中的XSL,一个区域将显示15倍。

什么是最好的方式只显示每个地区一次?

+0

我们需要看到您的XML看起来像什么,和一些你的XSLT的。 – JLRishe

+0

嗨JLRishe - 没有可用的XML。我正在使用包含列表的内容管理系统。该列表包含两列,一个国家和一个地区。每个国家都有相关的地区。我使用XSL来表示这些信息。我更新了XSL以显示我的完整代码。 – MegaTron

+0

嗯,我猜你必须知道XML的结构,否则你将无法在第一时间编写任何XSLT;)。但无论如何,这听起来很像分组问题。你在这里使用XSLT1.0还是XSLT2.0? –

回答

0

我写了一个JavaScript函数,将每个独特的项目推入一个数组,然后使用该数组来填充我的容器。全部解决。感谢所有帮助家伙:)

function removeDuplicates(){ 
var Array = new Array(); 
$('#filter > .filter-item').each(function(){ 
    var country = $(this).attr('country ');   
    if ($.inArray(region, Array) == -1) { 
     Array .push(region); 
    } 
}); 
Array .sort(); 

var length = Array .length; 
for (var i = 0; i < length; i++) { 
    $('#filter-container').find('.container').append('<label class="filter-item" country="' + Array [i] + '">' 
               + '<input type="radio" name="country" class="checkbox">' 
                + Array [i] + 
               '</input>' + 
             '</label> '); 
    } 

}