2016-07-13 41 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()' –