如何查找给定数组中包含值的 HTML 个元素?
How to find HTML elements with values contained in a given array?
问题
给定这段代码:
<ul>
<li><input type="hidden" value="1"/>Choice 1</li>
<li><input type="hidden" value="2"/>Choice 2</li>
<li><input type="hidden" value="3"/>Choice 3</li>
<li><input type="hidden" value="4"/>Choice 4</li>
<li><input type="hidden" value="5"/>Choice 5</li>
</ul>
如何正确地select 列出输入值包含在数组 [1, 3, 4]
中的元素?
研究方向
我在这段代码中尝试了一些解决方案,但似乎没有什么效果很好。
alert($("li").has("input[value='3']").text()); // Not a solution
alert($("li").has("input[value='[1,3,4]']").text()); // Not working
alert($("li").has("input[value=[1,3,4]]").text()); // Not working
alert($("li").has("input[value=['1','3','4']]").text()); // Nope
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li><input type="hidden" value="1"/>Choice 1</li>
<li><input type="hidden" value="2"/>Choice 2</li>
<li><input type="hidden" value="3"/>Choice 3</li>
<li><input type="hidden" value="4"/>Choice 4</li>
<li><input type="hidden" value="5"/>Choice 5</li>
</ul>
您可以使用 filter()
从相关子 input
元素中找到 li
。
var valueArr = [1, 3, 4];
var $li = $('li').filter(function() {
return valueArr.indexOf(parseInt($(this).find('input').val(), 10)) != -1;
});
$li.css('color', '#C00'); // just to make the effect obvious
console.log($li.text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<input type="hidden" value="1" />Choice 1</li>
<li>
<input type="hidden" value="2" />Choice 2</li>
<li>
<input type="hidden" value="3" />Choice 3</li>
<li>
<input type="hidden" value="4" />Choice 4</li>
<li>
<input type="hidden" value="5" />Choice 5</li>
</ul>
你可以在这里使用filter()
alert($("li").filter(function() {
return [1, 3, 4].indexOf(parseInt($('input', this).val(), 10)) > -1;
}).text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
<li>
<input type="hidden" value="1" />Choice 1</li>
<li>
<input type="hidden" value="2" />Choice 2</li>
<li>
<input type="hidden" value="3" />Choice 3</li>
<li>
<input type="hidden" value="4" />Choice 4</li>
<li>
<input type="hidden" value="5" />Choice 5</li>
</ul>
或者使用 multiple attribute selector
alert($("li").has('[value=1],[value=3],[value=4]').text()); // Not working
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
<li>
<input type="hidden" value="1" />Choice 1</li>
<li>
<input type="hidden" value="2" />Choice 2</li>
<li>
<input type="hidden" value="3" />Choice 3</li>
<li>
<input type="hidden" value="4" />Choice 4</li>
<li>
<input type="hidden" value="5" />Choice 5</li>
</ul>
var arr = ['1', '3', '4'];
$('ul li').filter(function() {
return $.inArray($(this).find('input').val(), arr) != -1; // if found return and add class red
}).addClass('red')
.red {
background-color: red
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<input type="hidden" value="1" />Choice 1</li>
<li>
<input type="hidden" value="2" />Choice 2</li>
<li>
<input type="hidden" value="3" />Choice 3</li>
<li>
<input type="hidden" value="4" />Choice 4</li>
<li>
<input type="hidden" value="5" />Choice 5</li>
</ul>
这样做
我们必须得到多个属性选择器格式为
$("li").has("input[value='1'],input[value='3'],input[value='4']");
使用 reduce
从 array
获取
var arr = [1,3,4];
document.write($("li").has(arr.reduce(function(prev,next){
return prev + ",input[value='"+next+"']";
},"").slice(1)).text());
<script src="https://code.jquery.com/jquery-2.1.4.js"></script><ul>
<li><input type="hidden" value="1"/>Choice 1</li>
<li><input type="hidden" value="2"/>Choice 2</li>
<li><input type="hidden" value="3"/>Choice 3</li>
<li><input type="hidden" value="4"/>Choice 4</li>
<li><input type="hidden" value="5"/>Choice 5</li>
</ul>
问题
给定这段代码:
<ul>
<li><input type="hidden" value="1"/>Choice 1</li>
<li><input type="hidden" value="2"/>Choice 2</li>
<li><input type="hidden" value="3"/>Choice 3</li>
<li><input type="hidden" value="4"/>Choice 4</li>
<li><input type="hidden" value="5"/>Choice 5</li>
</ul>
如何正确地select 列出输入值包含在数组 [1, 3, 4]
中的元素?
研究方向
我在这段代码中尝试了一些解决方案,但似乎没有什么效果很好。
alert($("li").has("input[value='3']").text()); // Not a solution
alert($("li").has("input[value='[1,3,4]']").text()); // Not working
alert($("li").has("input[value=[1,3,4]]").text()); // Not working
alert($("li").has("input[value=['1','3','4']]").text()); // Nope
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li><input type="hidden" value="1"/>Choice 1</li>
<li><input type="hidden" value="2"/>Choice 2</li>
<li><input type="hidden" value="3"/>Choice 3</li>
<li><input type="hidden" value="4"/>Choice 4</li>
<li><input type="hidden" value="5"/>Choice 5</li>
</ul>
您可以使用 filter()
从相关子 input
元素中找到 li
。
var valueArr = [1, 3, 4];
var $li = $('li').filter(function() {
return valueArr.indexOf(parseInt($(this).find('input').val(), 10)) != -1;
});
$li.css('color', '#C00'); // just to make the effect obvious
console.log($li.text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<input type="hidden" value="1" />Choice 1</li>
<li>
<input type="hidden" value="2" />Choice 2</li>
<li>
<input type="hidden" value="3" />Choice 3</li>
<li>
<input type="hidden" value="4" />Choice 4</li>
<li>
<input type="hidden" value="5" />Choice 5</li>
</ul>
你可以在这里使用filter()
alert($("li").filter(function() {
return [1, 3, 4].indexOf(parseInt($('input', this).val(), 10)) > -1;
}).text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
<li>
<input type="hidden" value="1" />Choice 1</li>
<li>
<input type="hidden" value="2" />Choice 2</li>
<li>
<input type="hidden" value="3" />Choice 3</li>
<li>
<input type="hidden" value="4" />Choice 4</li>
<li>
<input type="hidden" value="5" />Choice 5</li>
</ul>
或者使用 multiple attribute selector
alert($("li").has('[value=1],[value=3],[value=4]').text()); // Not working
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
<li>
<input type="hidden" value="1" />Choice 1</li>
<li>
<input type="hidden" value="2" />Choice 2</li>
<li>
<input type="hidden" value="3" />Choice 3</li>
<li>
<input type="hidden" value="4" />Choice 4</li>
<li>
<input type="hidden" value="5" />Choice 5</li>
</ul>
var arr = ['1', '3', '4'];
$('ul li').filter(function() {
return $.inArray($(this).find('input').val(), arr) != -1; // if found return and add class red
}).addClass('red')
.red {
background-color: red
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<input type="hidden" value="1" />Choice 1</li>
<li>
<input type="hidden" value="2" />Choice 2</li>
<li>
<input type="hidden" value="3" />Choice 3</li>
<li>
<input type="hidden" value="4" />Choice 4</li>
<li>
<input type="hidden" value="5" />Choice 5</li>
</ul>
这样做
我们必须得到多个属性选择器格式为
$("li").has("input[value='1'],input[value='3'],input[value='4']");
使用 reduce
从 array
var arr = [1,3,4];
document.write($("li").has(arr.reduce(function(prev,next){
return prev + ",input[value='"+next+"']";
},"").slice(1)).text());
<script src="https://code.jquery.com/jquery-2.1.4.js"></script><ul>
<li><input type="hidden" value="1"/>Choice 1</li>
<li><input type="hidden" value="2"/>Choice 2</li>
<li><input type="hidden" value="3"/>Choice 3</li>
<li><input type="hidden" value="4"/>Choice 4</li>
<li><input type="hidden" value="5"/>Choice 5</li>
</ul>