我有列表选择:
<select id="sel">
<option id="a1" value="volvo">Volvo</option>
<option id="a2" value="saab">Saab</option>
<option id="a3" value="mercedes">Mercedes</option>
<option id="a4" value="audi">Audi</option>
<option id="a5" value="volvo2">Volvo2</option>
<option id="a6" value="saab2">Saab2</option>
<option id="a7" value="mercedes2">Mercedes2</option>
<option id="a8" value="audi2">Audi2</option>
</select>
在PHP中我有数组:
$array = array('a1', 'a4', 'a5', 'a8');
如何使用jQuery show in select #sel only values其中id选项是在PHP的$ array中?
这个例子应该是:
<select id="sel">
<option id="a1" value="volvo">Volvo</option>
<option id="a4" value="audi">Audi</option>
<option id="a5" value="volvo2">Volvo2</option>
<option id="a8" value="audi2">Audi2</option>
</select>
我不想为此使用PHP。我想用jQuery。谢谢!
答案 0 :(得分:2)
使用php数组,您可以生成这样的选择器,并删除或隐藏不需要的选项。
您可以从服务器端渲染数组或选择器('#a1, #a4, #a5, #a8'
),并在客户端使用它。
$('select option').not('#a1, #a4, #a5, #a8').remove();
如果它是一个数组,你可以尝试这个。
$('select option').not('#' + array.join(',#')).remove();
工作演示 - http://jsfiddle.net/TZCcA/1/
答案 1 :(得分:1)
你可以这样做,但是你需要将PHP数组回显到页面,以便jQuery可以使用它。
jQuery的:
var ary = ['a1', 'a4', 'a5', 'a8']; // output your PHP array here
$('option').each(function() {
if ($.inArray($(this).attr('id'), ary)==-1) $(this).remove();
})
你想要在jQuery数组定义中回显你的PHP数组。像这样:
var ary = [
<?php
foreach($item in $array){
echo "'$item',";
}
?>
];
请注意,这将在您不想要的末尾添加额外的逗号。使用循环删除它是微不足道的,但是我没有将其添加到此代码中。
jsFiddle example (没有PHP)。
答案 2 :(得分:1)
首先需要将数组吐出为可用格式,以便jQuery可以访问其值。我建议使用json_encode。
echo json_encode( array('a1', 'a4', 'a5', 'a8') );
输出将是:
["a1","a4","a5","a8"]
因此,最好将其分配给变量。接下来,您将遍历列表并隐藏数组中未找到的任何元素:
// Our array from PHP
var myArr = ["a1","a4","a5","a8"];
// Select all options, and filter
$("#sel option").filter(function(){
// Return items not found in our array
return $.inArray( this.id, myArr ) === -1;
}).remove();
工作演示:http://jsbin.com/ocebup/edit#javascript,html
ShankarSongoli也有一个很好的解决方案,它不需要过滤器,而是将值数组修改为选择器并将其传递给$ .not()方法。请参阅他们对代码的回答:https://stackoverflow.com/a/9723034/54680