Javascript jQuery:删除重复元素-临时
我有一个带有公共类的元素列表,希望隐藏所有重复的元素。我可以做到这一点。但是,我有一个显示和隐藏元素列表的“切换”链接。当切换发生时,我希望浏览器“重置”或“忘记”标记为重复的内容,以便用户再次单击过滤器 My显示过滤器正在工作,但我不想像第19行那样将Javascript jQuery:删除重复元素-临时,javascript,jquery,duplicates,Javascript,Jquery,Duplicates,我有一个带有公共类的元素列表,希望隐藏所有重复的元素。我可以做到这一点。但是,我有一个显示和隐藏元素列表的“切换”链接。当切换发生时,我希望浏览器“重置”或“忘记”标记为重复的内容,以便用户再次单击过滤器 My显示过滤器正在工作,但我不想像第19行那样将#container的每个子DIV都更改为可见元素—例如,在我的项目中,这已经发生在该代码之外。要“忘记”元素,我需要使用类似于第18行的内容,尽管这似乎不起作用 优选地,“遗忘”将在元素被隐藏时立即发生(第7行),因此它准备在过滤器的未来实例中
#container
的每个子DIV都更改为可见元素—例如,在我的项目中,这已经发生在该代码之外。要“忘记”元素,我需要使用类似于第18行的内容,尽管这似乎不起作用
优选地,“遗忘”将在元素被隐藏时立即发生(第7行),因此它准备在过滤器的未来实例中再次出现。正确的语法是什么
编辑:为了更好地了解我的目标:
希望这有意义 一旦选择了所有这些元素,就可以通过添加一个只有它们才能拥有的特殊类来隐藏它们,比如
tempHidden
或其他什么。然后,当您准备再次显示它们时,您可以选择具有该“特殊”类别的所有项目:
当你准备好再次展示时
$('.tempHidden').show();
当您需要选择除隐藏项以外的所有项时,可以使用.not()
方法:
$('.everything').not('.tempHidden');
根据以下评论中的要求进行了更新(上一个已被破坏,但不是): 基本上,对每个作业使用相同的
id
,允许我们跟踪作业,并且我们可以为检查作业类型分配多个类。可能有多种方法可以实现这一点,可能更多地取决于您实际如何显示它们,但这是可行的
HTML:
JS:
我不明白你想要什么。。。我取消了您的
seen[txt]=false的注释,它隐藏和显示得很好。感谢您的查看-请查看上面我的编辑。感谢您的评论,也许我不够具体-请查看我在原始帖子中的编辑。在这种情况下,您可以在('change',function(){})上执行$('.someCheckBox')。on('change',function(){})
,只需根据单击的内容及其当前选中状态显示和隐藏块即可。感谢您的发布-需要的是,单击一个复选框显示一个作业,同时选中两个复选框也只显示一个作业-因此,选中两个复选框时只显示一个作业。你明白我的意思吗?当两者都被检查时,哪个作业应该是可见的?您是否需要能够通过多次翻页一次只显示一个?或者你的意思是,从技术上讲,这两份工作都是同一份工作,只是被认为是保安和秘书的工作?是的,没错,这是一份既属于保安又属于秘书的工作,我只是不想让它出现两次。我会想,通过设置seen[txt]=false,一旦DIV被隐藏,它下次会再次显示吗?有些东西告诉我,我只缺少一两行代码。@Chris好的,这一行完全有效。最后一个问题是取消隐藏和隐藏不同的复选标记。非常感谢,我稍后会看一下并给你回复。
$('.everything').not('.tempHidden');
<div id="input">
<form>
<input type="checkbox" name="jobs" value="security">Security
<br>
<input type="checkbox" name="jobs" value="secretarial">Secretarial
</form>
</div>
<div id="display">
<div class="posting hidden security" id="12345">
This is a test Security job. Id: 12345
</div>
<div class="posting hidden secretarial" id="12345">
This is a test Secretarial job. Id: 12345
</div>
</div>
.posting {
border: 2px solid #000000;
}
.hidden {
display: none;
visibility: hidden;
}
#input {
float: left;
}
#display {
margin-left: 100px;
float: left;
}
$("#input form input").change(function () {
var jobType = $(this).val();
var jobIds = [];
var id;
function getJobs() {
$(".posting." + jobType).each(function () {
id = $(this).attr("id");
if ($.inArray(id, jobIds) === -1) {
jobIds.push(id);
$(this).toggleClass("hidden");
if ($(this).hasClass("hidden")) {
jobIds = jQuery.grep(jobIds, function (value) {
return value != id;
});
}
}
});
}
$(".posting:not(.hidden, ." + jobType + ")").each(function () {
id = $(this).attr("id");
if ($.inArray(id, jobIds) === -1) {
jobIds.push(id);
}
});
//Toggle jobs
getJobs();
jobType = $(":checked").val();
getJobs();
});