jquery逃避特殊的charatcers同时循环选择项目

时间:2016-03-24 10:23:38

标签: javascript jquery

你可以帮我解决下面的特殊字符问题。 我有一个值来检查选择下拉列表并将其删除。但是选择的文本中有特殊的字符,所以它有些不起作用。 请帮忙。



selArray = ['option (1)']
$('selArray').each(function(index, item) {
    $('#sel option[value="+item+"]').remove()
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<select name="sel" id="sel">
    <option value="opt100">opt100</option>
    <option value="option (1)">option (1)</option>
    <option value="33">opt33</option>
</select>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:1)

我想我有一个解决方案。我所做的是使用Array.join将selArray缩减为字符串,然后使用String.replace使用反斜杠(正则表达式的约定)转义特殊字符,然后使用正则表达式检查如果它匹配当前选择元素的值。

请参阅我的代码:

selArray=['option (1)']
$('#sel option').each(function(){
  var test = selArray.join('|').replace(/\(|\)/gi, '\\$&')
  var re = new RegExp(test, 'i')
  if(re.test($(this).val())) $('#sel option[value="' + $(this).val() + '"]').remove()  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<select name="sel" id="sel">
<option value="opt100">opt100</option>
<option value="option (1)">option (1)</option>
<option value="33">opt33</option>
</select>

在行中:

var test = selArray.join('|').replace(/\(|\)/gi, '\\$&')

正则表达式/\(|\)/gi/查找开括号或闭括号的每个实例。替换正则表达式\\$&基本上是在每次匹配之前放置一个反斜杠。如果您不熟悉正则表达式,我建议使用RegExr,这是一个非常有用的资源。

这一行:

var re = new RegExp(test, 'i')

使用加入selArray形成的(现在转义的)字符串创建一个新的正则表达式。然后根据以下行中每个select元素的值对其进行测试:

if(re.test($(this).val())) $('#sel option[value="' + $(this).val() + '"]').remove()

其中如果条件返回true,则删除有问题的select元素。

希望这有帮助!

答案 1 :(得分:0)

试试这个..

&#13;
&#13;
selArray=['option (1)']
$('#sel option').each(function(index,item){
   a = $(this).val();
  //console.log(a);
  if($.inArray(a,selArray)!== -1)
  {
    //console.log($.inArray(a,selArray));
    $(this).remove()
  }
 });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<select name="sel" id="sel">
<option value="opt100">opt100</option>
<option value="option (1)">option (1)</option>
<option value="33">opt33</option>
</select>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

以上是我上面评论的答案,你的一些语法不正确。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<select name="sel" id="sel">
    <option value="opt100">opt100</option>
    <option value="option (1)">option (1)</option>
    <option value="33">opt33</option>
</select>

<script>
    selArray = ['option (1)'];
    $(selArray).each(function(index, item)
    {
        var opt = $('#sel').find('option[value="' + item + '"]');
        $('#sel').find('option[value="' + item + '"]').remove();
    });
</script>

说明:转换为jQuery对象时,不需要引用selArray。

此外,连接选择器时缺少引号。

以上代码适合您。