-1

这是一个动态创建的 HTML 作者列表及其属性:

<span class="authors">
    <a href="/url_one">Author One Name</a><span> - <a href="http://wsj.com">Author Attirbute String</a></span>,
    <a href="/url_one">Author Two Name</a><span> - <a href="http://wsj.com">Author Attirbute String</a></span>, and
    <a href="/url_one">Author Three Name</a><span> - <a href="http://wsj.com">Author Attirbute String</a></span>
</span>

<span> <a href="http://wsj.com">Author Attirbute String</a></span>如果它们相同且连续,我如何使用 JQuery 剥离每个连续的,只留下最后一个?

所以,假设我有三位作者都具有相同的“华尔街日报”属性......我正在努力做到这一点:

作者一姓名 - 华尔街日报,作者二姓名 - 华尔街日报,作者三姓名 - 华尔街日报

是这样的:

作者一姓名、作者二姓名和作者三姓名 - 华尔街日报

它只有在属性相同且连续的情况下才能工作,否则会中止功能。

其他几个注意事项:

  1. 每个 HTML 实例可以有 1 到 4 个作者。
  2. 一个页面上可以有这些作者列表的几个实例,它们都需要处理。

如果可以的话,请帮忙!我知道这很复杂...

这是我正在做的一个非简化示例...它是一个 Drupal 站点,属性是由 JQuery 从代码中的标题标签使用我想修改以删除重复项的函数从代码中生成的:

$(function() {
  $('span.authors a').each(function() {
    $('a[href^="/authors/"]').attr('title');
    if ($(this).attr('title')) { var attrarray = $(this).attr('title').split('|');
      if (attrarray[1]) { var thespan = '<span> ~ <a href="http://' + attrarray[1] + '">' + attrarray[0] + '</a></span>'; }
      else { var thespan = '<span> ~ ' + attrarray[0] + '</span>'; }
      $(this).after(thespan); }
  });
});

以下是页面示例:http: //kpbj.com/authors/dee_ann_durbin

4

2 回答 2

3
// Get spans.
var attributes = $('.authors').children('span');

// Save first value in variable to compare it to other elements.
var content = attributes.first().html();

// Iterate through all children and compare their values to the first one.
$.each(attributes, function(index, item){
       // Abort if not the same.
       if ($(item).html() != content) return;
   });

// All are the same. Remove all except the last one.
$.each(attributes, function(index, item) {
       if (index != attributes.length - 1) $(item).remove();
   });

这是小提琴

更新:
根据评论,这里是更新的fiddle

于 2013-04-28T15:46:38.593 回答
0

I don't like this style, but there you go . . . temporary solution for your problem.

    var allAuthors = [];
    var countAuthors = $(".authors span").length;
    $(".authors span").each(function(i){
        var authorSpan = $(this);
        if(allAuthors.indexOf($(this).html()) == -1){
            authorSpan.hide();
            allAuthors.push($(this).html());
        }else{
            if(countAuthors-i>1){
                authorSpan.hide();
            }
        }
    });
于 2013-04-28T15:28:35.397 回答