选择依赖于PHP Array的选项

时间:2012-03-15 15:29:36

标签: php javascript jquery html select

我有列表选择:

<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> 

http://jsfiddle.net/TZCcA/

我不想为此使用PHP。我想用jQuery。谢谢!

3 个答案:

答案 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