使用jquery / Js如何隐藏重复文本的选项值。
Main Goal is Remove repeated text option value from select box.
我想隐藏具有id值4,5和6的Test1和Test2,因为它们的值在选项框中重复。
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4">Test1</option>
<option id="5" value="5">Test1</option>
<option id="6" value="6">Test2</option>
</select>
jquery代码在下面,
$(document).ready(function(){
$('#finish').each(function(){
//$(this).text().hide();
});
});
最终结果如下所示,
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4" style="display:none">Test1</option>
<option id="5" value="5" style="display:none">Test1</option>
<option id="6" value="6" style="display:none">Test2</option>
</select>
如何使用javascript或jquery脚本执行此操作。
感谢。
答案 0 :(得分:2)
初始化空数组finishItems
。
使用
在选择选项中循环$("select > option").each(function(){
});
如果该选项不在列表中,则添加该选项(如果存在)将其删除。
var finishItems = {};
$("select > option").each(function () {
if(finishItems[this.text]) {
$(this).remove();
} else {
finishItems[this.text] = this.value;
}});
$(document).ready(function(){
var finishItems = {};
$("select > option").each(function () {
if(finishItems[this.text]) {
$(this).remove();
} else {
finishItems[this.text] = this.value;
}});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4">Test1</option>
<option id="5" value="5">Test1</option>
<option id="6" value="6">Test2</option>
</select>
&#13;
答案 1 :(得分:2)
您可以使用filter()
过滤与前一个元素具有相同文本的元素和一个用于存储文本的对象。
var obj = {}, select = $('select');
select.html(select.find('option').filter(function() {
var text = $(this).text();
return !obj[text] ? obj[text] = 1 : false;
}));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4">Test1</option>
<option id="5" value="5">Test1</option>
<option id="6" value="6">Test2</option>
</select>
如果您只想将display: none
添加到重复项,则可以使用each
循环。
var obj = {},select = $('select');
select.find('option').each(function() {
var text = $(this).text();
!obj[text] ? obj[text] = 1 : $(this).css('display', 'none');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4">Test1</option>
<option id="5" value="5">Test1</option>
<option id="6" value="6">Test2</option>
</select>
答案 2 :(得分:2)
我想这很有效。
$(document).ready(function(){
var values231 = [];
$.each($('option'), function(){
var flag = false;
var thishtml = $(this).html();
for(var i = 0; i< values231.length; i++){
if(thishtml == values231[i]){
$(this).hide();
flag = true;
}
}
if(!flag){
values231.push(thishtml);
}
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4">Test1</option>
<option id="5" value="5">Test1</option>
<option id="6" value="6">Test2</option>
</select>
&#13;
答案 3 :(得分:1)
var arr = []
$("#finish option").each(function(i, v) {
if ($.inArray($(this).text(), arr) == -1) {
arr.push($(this).text())
} else {
$(this).prop("disabled", true)
}
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4">Test1</option>
<option id="5" value="5">Test1</option>
<option id="6" value="6">Test2</option>
</select>
&#13;
答案 4 :(得分:1)
尝试使用Array#includes()
和Array#push
函数。将innerText
推送到数组然后检查新元素文本是否在数组中。如果不存在则在array.else中使用push隐藏受尊重的元素< / p>
$(document).ready(function() {
var arr = [];
$('#finish option').each(function() {
var val = $(this).text().trim();
if (!arr.includes(val)) {
arr.push(val)
} else {
$(this).hide();
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4">Test1</option>
<option id="5" value="5">Test1</option>
<option id="6" value="6">Test2</option>
</select>
答案 5 :(得分:1)
我的方法是创建一个包含文本的对象,如果选项文本已经注册,则会删除该选项。
$(document).ready(function(){
var elements = {};
$('#finish option').each(function(){
console.log($(this).val(), this);
if(elements[$(this).text()]){
$(this).remove();
} else {
elements[$(this).text()] = true;
}
});
});
答案 6 :(得分:1)
一个简单的(vanilla)Javascript解决方案:
var options = document.getElementById('finish').options;
var contents = [];
for (var i = 0; i < options.length; i++) {
if (contents.includes(options[i].textContent)) {
options[i].style.display = 'none';
} else {
contents.push(options[i].textContent);
}
}
在IE中,隐藏选项不起作用。在这种情况下,唯一可靠的方法是从DOM中删除元素,并在需要时读取它们。
答案 7 :(得分:1)
尝试这样的事情:
var arr = [];
$('#finish option').each(function(){
if( $.inArray($(this).text(), arr) == -1 )
{
arr.push($(this).text());
}
else
{
$(this).hide();
}
});
说明:在其中创建一个空白数组,并通过检查它是否已存在来推送其中的唯一值。并隐藏重复的选项。
答案 8 :(得分:1)
试试这个:
var seen = {};
$('#finish option').each(function() {
var txt = $(this).text();
if (seen[txt])
$(this).hide();
else
seen[txt] = true;
});
答案 9 :(得分:1)
仅确保不同的文字:
var seen = {}
$(document).ready(function(){
$('#finish').each(function(){
if ( seen[ $(this).text() ] ) {
$(this).hide();
} else {
seen[$(this).text()] = true;
}
});
});
seen[ $(this).text() ]
部分undefined
如果未设置,则只有看不见的文字值才会转到else
。
您还可以调整条件以获得更复杂的逻辑。
答案 10 :(得分:0)
循环选项并删除重复的值。
var repeatText = {};
$("#finish > option").each(function () {
if(repeatText[this.text]) {
$(this).remove();
} else {
repeatText[this.text] = this.value;
}});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4">Test1</option>
<option id="5" value="5">Test1</option>
<option id="6" value="6">Test2</option>
</select>
&#13;
答案 11 :(得分:0)
您可以在数组的选项中添加数据。在该数组中查找唯一。
<强> JS 强>
var array = ["Test1", "Test2", "Test3", "Test1", "Test1", "Test2"]
var json = _.uniq(array);
$.each(json, function(i, value) {
$('#finish').append($('<option>').text(value).attr({
'value': i+1,
'id': i+1
}));
});
<强> HTML 强>
<select name="finish" id="finish" class="form-control">
<option value="">Finish</option>
</select>
答案 12 :(得分:0)
您可以在新数组中存储text
列表(请参阅我的代码示例中的arrHide
),因此在循环选择的选项中,您可以检查当前文本是否已经存在在arrHide
数组中,然后隐藏相关项。
请参阅以下内容:
var arrHide = [];
$("#finish > option").each(function() {
if($.inArray(this.text, arrHide) < 0){
arrHide.push(this.text);
}
else {
$(this).hide();
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="finish" id="finish">
<option value="">Finish</option>
<option id="1" value="1">Test1</option>
<option id="2" value="2">Test2</option>
<option id="3" value="3">Test3</option>
<option id="4" value="4">Test1</option>
<option id="5" value="5">Test1</option>
<option id="6" value="6">Test2</option>
</select>
&#13;
我希望它可以帮助你,再见。