jquery在循环select中的项时转义特殊字符

jquery escaping special charatcers while looping items in select

本文关键字:转义 特殊字符 循环 select jquery      更新时间:2023-09-26

你能帮我解决下面的特殊字符问题吗。我有一个值要在select下拉列表中检查并删除它。但是select文本中有特殊字符,所以有些原因是它不起作用。请帮忙。

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>

我想我有一个解决方案。我所做的是使用Array.join将selArray简化为一个字符串,然后使用String.replace用反斜杠对特殊字符进行转义(这是正则表达式的惯例),然后使用正则表达式检查它是否与当前有问题的select元素的值匹配。

查看我的代码:

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形成的(现在已转义)字符串创建一个新的正则表达式。然后,根据以下行中每个选择元素的值进行测试:

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

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

希望这能有所帮助!

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

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

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

以上代码将适用于您。

试试这个。。

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()
  }
 });
<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>