2011-08-15 24 views
0

我有一个链接列表,其中一些可能是重复的href的,但链接文本本身已被稍微编辑。如果hrefs是相同的链接列表替换文本jQuery

在一分钟,为了摆脱重复我一直在使用此代码。

var seen = {}; 
$('.sortable li div a').each(function() { 
    var txt = $(this).text(); 
    var linkTxt = $(this).attr("href"); 
    if (seen[linkTxt]){ 
    $(this).parent().parent().remove(); 
    var sortableList = $(".sortable").html(); 
    $("#ItemDescription").val(sortableList); 
    }else{ 
    seen[linkTxt] = true; 
    $(".sortable li div").each(function(){ 
    var selectLength = $(this).find("input").length; 
    if(selectLength == 0){ 
     $("<input type='checkbox' name='selected' class='select'/>").appendTo(this); 
    } 
}); 

该代码只是删除它,我需要的代码在与LINKTEXT接近底部的顶部更换LINKTEXT(最新的放在这里),然后将其删除,但只有在href的比赛。

任何任何想法?

我的列表看起来像这样

<ol class="sortable ui-sortable" style="float:right;"><li class="menu-item"> 
<div class="">Allure<input type="checkbox" name="selected" class="x_x_x_select"></div> 
<ol class=""> 
    <li style="display: list-item;" class=""> 
    <div class=""><a href="/portfolios/energy-drink" class="" name="">Energy-Drink</a><input type="checkbox" name="selected" class="x_x_select"></div> 
    </li> 
</ol> 
</li> 
<li class="menu-item"> 
<div class="">Avon<input type="checkbox" name="selected" class="x_x_x_select"></div> 
</li> 
<li class="menu-item"> 
<div class="">Bitten SJP<input type="checkbox" name="selected" class="x_x_x_select"></div> 
</li> 
<li style="display: list-item;" class=""> 
    <div class=""><a href="/portfolios/energy-drink" class="" name="">Allure-Energy-Drink</a><input type="checkbox" name="selected" class="x_x_select"></div> 
    </li> 
</ol> 
+1

为什么要首先更改链接文本,如果您将其删除? – marc

+0

所以菜单是一个嵌套列表..我想检查底部的项目(哪些是新的,但没有放置),如果已经有一个项目具有相同的HREF我想从底部删除它,但首先我想用刚刚添加到底部的较新的A文本替换嵌套项目中的A文本,然后当完成时,我想从底部移除该项目,这可能没有任何意义。对不起 –

回答

0

如果我明白你correwctly,你要采取从底部的项目,寻找顶部的按项目,更换一个人的文字和删除元素底端。

var changed = true; 
while(changed) { 
    changed = false; 
    $('.sortable li div a').each(function() { 
     var all = $('.sortable li div a[href=' + $(this).attr('href') + ']'); 
     if(all.length > 1) { 
      all.first().text(all.last().text()); 
      all.slice(1).remove(); 
      changed = true; 
      return false; 
     } 
    }); 
} 
+0

这正是我正在寻找的,但由于某种原因,它不工作,这是在另一个功能?非常感谢你的帮助! –