2016-07-13 81 views
-2

我創建這個jQuery的報價:創建與變量選擇當變量的內容有

$(document).ready(function() { 
     $(".responsivetable").on("click", "td", function() { 
      var content = $(this).text(); 
      var index = ($(this).index()); 
      $(".responsivetable tr td:nth-child(" + (index + 1) + "):contains('" + content + "')").addClass('kleur1'); 

     }); 
    }); 

它的作用是,當你點擊一個表格單元格(TD)所有其他TD的中同一列,具有相同的內容,獲得特定的類。

所以,當你點擊名字'John'的列時,那個'John'列中的所有單元格都會得到一個cssclass。

這是有效的,但不是當內容包含單引號時,如nov '16

我認爲這是因爲字符串連接中斷,但我該如何解決這個問題?

(其他途徑來解決我想也歡迎來完成的事情。)

+2

而不是':包含( ' 「+內容+」' )'嘗試使用':contains(「+ content +」)' –

+0

感謝downvotes,對不起,我不知道如何解決這個問題:-S – Michel

+0

我不知道爲什麼這是downvoted。它有一個問題描述,當前在語法上有效的代碼的嘗試,期望的結果,適當的標籤,正確的標題。我不確定有什麼缺失。 – Tomalak

回答

2
$(".responsivetable").on("click", "td", function() { 
    var content = $.trim($(this).text()).toLowerCase(), 
     index = $(this).index() + 1, 
     $candidates = $(".responsivetable tr td:nth-child(" + index + ")"); 

    $candidates 
     .removeClass("kleur1") 
     .filter(function() {  
      return $(this).text().toLowerCase().indexOf(content) > -1; 
     }) 
     .addClass('kleur1'); 
}); 

備選:

$(".responsivetable").on("click", "td", function() { 
    var content = $.trim($(this).text()).toLowerCase(), 
     index = $(this).index() + 1, 
     $candidates = $(".responsivetable tr td:nth-child(" + index + ")"); 

    $candidates 
     .toggleClass("kleur1", function() { 
      return $(this).text().toLowerCase().indexOf(content) > -1; 
     }); 
}); 
+1

你能解釋爲什麼':contains()'在這種情況下不起作用嗎?無論如何,這是不同的行爲,與OP的發佈代碼不同,這裏不區分大小寫。但我想這在這裏並不重要 –

+0

我不想佔用我自己的思想,想辦法正確地轉義各種輸入值,以便選擇器字符串不會中斷。這是浪費時間,'.filter()'在這裏更合適。另外,':contains()'區分大小寫和空白區域,無法改變它。 – Tomalak

+0

好的,但只發布代碼答案並沒有真正的幫助(通常),特別是如果它改變了原來的行爲。但是我認爲你是正確的,OP最好在這裏使用'filter()' –