使用javascript检查html表中是否存在变量

使用javascript检查html表中是否存在变量,javascript,jquery,html-table,Javascript,Jquery,Html Table,我现在有两张桌子。我希望实现的是在一个表中选择一行,从中获取文件名字段,然后检查另一个表中是否存在该文件名。如果文件存在于两个表中,我想更改进度跟踪器的颜色。现在我可以选择行,但我似乎无法对照另一个表进行检查。任何帮助都将不胜感激 HTML: 再次感谢你的帮助 $("#table").on('click','tr',function(){ // <-- #1 var $this = $(this),

我现在有两张桌子。我希望实现的是在一个表中选择一行,从中获取文件名字段,然后检查另一个表中是否存在该文件名。如果文件存在于两个表中,我想更改进度跟踪器的颜色。现在我可以选择行,但我似乎无法对照另一个表进行检查。任何帮助都将不胜感激

HTML:

再次感谢你的帮助

$("#table").on('click','tr',function(){                   // <-- #1
   var $this    = $(this),                                // <-- #2
       filename = $this.find('td:nth-child(2)').text(),   // <-- #3
       $words   = $('#words');

   $this.addClass('selected').siblings().removeClass('selected');
   $words.html(filename).css('color','black');

   if ( valueInTable('table2', 1, filename ) ){           // <-- #4
     $words.css('color', 'blue');
   }

});

function valueInTable(tableID, columnNum, searchString){
  var found = false;
  $( '#' + tableID + ' tr td:nth-child(' + columnNum + ')' ).each(function(){
    if ($(this).text() == searchString ){
      found = true;
      return false;
    }
  });

  return found;
}
这很重要,它将事件绑定到表。当表中的某个地方发生单击时,它会检查事件注册表,在本例中,它会检查是否单击了TR。这既是一种性能提升,因为您没有为表的每一行创建事件,而且如果您动态创建新行,则不必在创建新行时创建新事件。您只需创建一次此事件,就可以为表中的所有新/旧行设置此事件

将$this缓存到变量中。你不止一次地使用它,而且很可能你会更多地使用它。您不应该每次引用$this时都创建一个新的jQuery对象,所以请将它固定在一个变量中并重用它

虽然.html可能适用于您,但如果您有其他嵌入的html,您可能会得到您不想要的值,例如文件名,因此,您只需要.text,它只会给您文本值,并去掉所有嵌套的html,只留下文件名

使用函数会带来惩罚,但最好将长逻辑放在其他地方,以防您做更多的事情。例如,您的表可以按列数的宽度展开,您可能还希望在其中搜索值,或者您可能有更多要查找的表;这两种情况都可以使用相同的功能


如前所述:contains选择器是为您所追求的内容而构建的,但是有一个警告。contains的问题在于它缺乏定制。如果要将比较修改为正则表达式,或者要使用trim或truncate执行其他操作,则不能使用contains。您可以轻松地修改下面的代码:$.trim$this.text=$.trim searchString

正如@Pete所评论的,您可以使用if$'table2 td:包含'+value+.length,如下所示

$("#table").find("tr").click(function(){
    $(this).addClass('selected').siblings().removeClass('selected');
    var value=$(this).find('td:nth-child(2)').html();
    //alert(value);
    if ($('#table2 td:contains(' + value + ')').length) {
        document.getElementById("words").innerHTML = value;
    } else {
        document.getElementById("words").innerHTML = "false";
    }
});

查看JSFIDLE的工作示例:

发布实际的HTML将有助于提供更好的答案,或者发布一个到JSFIDLE的链接,介绍您到目前为止所获得的内容。如果$'table2 td:包含'+filename+.length//do Stuff抱歉,我刚刚添加了HTML,这些字段是使用php从文件中填充的,所以我不能真正显示出发生的很多事情。我将对你的问题进行投票,因为当你是新手时,很难做某些事情,但这个网站是为了防止垃圾邮件发送者/骗子。您还可以考虑更改您的用户名。你只需要几次投票就可以发表评论和做其他事情。非常感谢@vol7ron!contains可能是更好的选择,因为某些原因,我认为它是不推荐的。你也可以使用。过滤器,它工作得非常完美!谢谢你的帮助,在我获得15的声誉之前我不能投票,但我一定会尽快投票@用户可以选择它作为答案;你和Kishor会在你多索里的时候得到积分,你不知道我能做到!我已经在那里完成了,再次感谢你的帮助@用户请参考此编辑,因为它指出了值得考虑的更改,这些更改是存在的,但事先没有概述/描述。我还可以做很多其他的事情,但我将更改的数量保持在较低的水平,因为这是一个快速的学习工具。也就是说,如果您是该语言的新手,那么您已经表现出比其他一些经验丰富的开发人员更好的理解能力
$("#table").on('click','tr',function(){                   // <-- #1
   var $this    = $(this),                                // <-- #2
       filename = $this.find('td:nth-child(2)').text(),   // <-- #3
       $words   = $('#words');

   $this.addClass('selected').siblings().removeClass('selected');
   $words.html(filename).css('color','black');

   if ( valueInTable('table2', 1, filename ) ){           // <-- #4
     $words.css('color', 'blue');
   }

});

function valueInTable(tableID, columnNum, searchString){
  var found = false;
  $( '#' + tableID + ' tr td:nth-child(' + columnNum + ')' ).each(function(){
    if ($(this).text() == searchString ){
      found = true;
      return false;
    }
  });

  return found;
}
$("#table").find("tr").click(function(){
    $(this).addClass('selected').siblings().removeClass('selected');
    var value=$(this).find('td:nth-child(2)').html();
    //alert(value);
    if ($('#table2 td:contains(' + value + ')').length) {
        document.getElementById("words").innerHTML = value;
    } else {
        document.getElementById("words").innerHTML = "false";
    }
});