隐藏所有但第一匹配元素

时间:2010-06-14 21:25:04

标签: jquery html

我正在使用jquery对多个段落进行排序。目前我将它设置为仅显示以当前字母开头的段落。但现在,我想进一步巩固。如果段落标记之间的文本有多个实例,我希望除了第一个隐藏之外的所有实例。

这是我到目前为止所做的,但是它没有用。

var letter = '<?php  echo(strlen($_GET['letter']) == 1) ? $_GET['letter'] : ''; ?>'

function finish(){
    jQuery('p').each(function(){     
    if(jQuery(this).text().substr(0,1).toUpperCase() == letter){
         jQuery(this).addClass('current-series');
         jQuery(this).html(letter + '<span class="hidden">'+jQuery(this).text().slice(1)+ '</span>');
    }
    else{ jQuery(this).hide();}
   })
}

更新

对不起,伙计们,我知道这有点难以解释。这是一个基本的例子:

  • 所选字母为B
  • 返回的值为:

男孩

蝙蝠

蝙蝠

这些值中的每一个都在段落标记中。 有没有办法巩固这个?

男孩

蝙蝠

2 个答案:

答案 0 :(得分:2)

好的,我想我现在明白了。

试试这个: http://jsfiddle.net/Upa3S/

    var letter = 'B';

    var array = [];  // Stores array of the content of paragraphs

    function finish(){
        jQuery('p').each(function(){

               // Cache reference to the paragraph
            $th = jQuery(this);
            if($th.text().substr(0,1).toUpperCase() == letter) {

                    // Test if we've already stored the current content in array
                if(jQuery.inArray($th.text(), array) > -1) {
                       // If so, hide it
                    $th.addClass('hidden'); // You can do $th.hide() if you prefer
                } else {
                       // If not, put its content in the array
                     $th.addClass('current-series');
                    array.push($th.text());
                }
            } else {
                $th.hide();
            }
       })
    }

finish();​

或使用.filter()

http://jsfiddle.net/Fjj5d/

var letter = 'B';

var array = [];

function finish(){
    jQuery('p').filter(function(){
        $th = jQuery(this);
        if($th.text().substr(0,1).toUpperCase() == letter && jQuery.inArray($th.text(), array) < 0 ) {
            array.push($th.text());
            $th.addClass('current-series');
        } else {
            return this;
        }
    }).hide();
}
finish();

答案 1 :(得分:1)

这将隐藏第一个字段以外的所有内容:

编辑:你可以做以下凌乱的解决方案。

function finish(){
    var found_first = [];
    jQuery('p').each(function(){     
    if(jQuery(this).text().substr(0,1).toUpperCase() == letter){
    if(found_first[jQuery(this).text()] != true){
        jQuery(this).addClass('current-series');
        found_first[jQuery(this).text()] = true;
    }else{
        jQuery(this).hide();
    }
    }
    else{ jQuery(this).hide();}
   })

}