我正在使用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();}
})
}
更新
对不起,伙计们,我知道这有点难以解释。这是一个基本的例子:球
球
球
男孩
脑
蝙蝠
蝙蝠
这些值中的每一个都在段落标记中。 有没有办法巩固这个?
球
男孩
脑
蝙蝠
答案 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()
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();}
})
}