2016-03-24 60 views
0

你能幫我解決特殊字符的問題嗎? 我有一個值來檢查選擇下拉列表中並將其刪除。但是,選擇的文本有特殊的字符,所以有些不起作用。 請幫忙。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>

+0

你期待什麼項目? - 什麼是selArray?它似乎沒有被使用? – Stuart

+0

對不起,我糾正了那個....所以你現在面臨我的問題? –

+0

我添加了一個解決您的語法問題的答案。 – Stuart

回答

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形成的(現在的轉義)字符串的新的正則表達式。然後針對以下行上的每個選擇元素的值進行測試:

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

其中如果條件返回true,則刪除所討論的select元素。

希望這會有所幫助!

0

試試這個..

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>

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。

另外,在連接選擇器時缺少引號。

上述代碼適用於您。