突出显示多个表中的多行

时间:2017-06-26 12:53:01

标签: javascript css

我有一个包含多行信息的页面,由多个用户制作。我正在寻找一种方法来突出显示鼠标悬停时的所有用户行。

这" Highlight multiple items on hover's condition"几乎解决了我的问题,但由于我的问题中的类或id是来自数据库的动态,并且将包含来自DB的标识符并且每次都是唯一的。我无法应用它。

示例代码:https://jsfiddle.net/3cehoh78/



<table class="testtable">
      <tr id="uniqueIDthatcantbechanged">
        <td class="cellclass">Line 1a</td>
        <td class="cellclass">Sam</td>
        <td class="cellclass">data</td>
      </tr>
      <tr id="uniqueIDthatcantbechanged">
        <td class="cellclass">Line 2a</td>
        <td class="cellclass">Frodo</td>
        <td class="cellclass">data</td>
      </tr>
      <tr id="uniqueIDthatcantbechanged">
        <td class="cellclass">Line 3a</td>
        <td class="cellclass">Sam</td>
        <td class="cellclass">data</td>
      </tr>
      <tr id="uniqueIDthatcantbechanged">
        <td class="cellclass">Line 4a</td>
        <td class="cellclass">Legoman</td>
        <td class="cellclass">data</td>
      </tr>
    </table>
    <br>
    <br>
    <table class="testtable">
      <tr id="uniqueIDthatcantbechanged">
        <td class="cellclass">Line 1b</td>
        <td class="cellclass">Sauron</td>
        <td class="cellclass">data</td>
      </tr>
      <tr id="uniqueIDthatcantbechanged">
        <td class="cellclass">Line 2b</td>
        <td class="cellclass">Sam</td>
        <td class="cellclass">data</td>
      </tr>
      <tr id="uniqueIDthatcantbechanged">
        <td class="cellclass">Line 3b</td>
        <td class="cellclass">Sam</td>
        <td class="cellclass">data</td>
      </tr>
      <tr id="uniqueIDthatcantbechanged">
        <td class="cellclass">Line 4b</td>
        <td class="cellclass">Legoman</td>
        <td class="cellclass">data</td>
      </tr>
      <tr id="uniqueIDthatcantbechanged">
        <td class="cellclass">Line 5b</td>
        <td class="cellclass">Frodo</td>
        <td class="cellclass">data</td>
      </tr>
    </table>
&#13;
&#13;
&#13;

在这个例子中,我希望所有行都包含&#34; Sam&#34;鼠标悬停在其中一个上突出显示,所以行1a,3a,2b,3b。 我在考虑在生成表时为所有Sam行添加一个类(Sam有一个唯一的用户ID),但是如何更改影响鼠标悬停时所有行的css(而不仅仅是一个)。 请注意,我无法为所有唯一的用户ID预先添加css类,这只是一个示例。

3 个答案:

答案 0 :(得分:0)

简单的解决方案,不使用jQuery和co:https://jsfiddle.net/3cehoh78/3/

var rows = [].slice.call(document.querySelectorAll('.testtable tr'));

rows.forEach(function(row) {
  row.addEventListener('mouseover', function() {
    resetHighlighting();
    var name = row.querySelector('td:nth-child(2)').textContent;
    rows.forEach(function(r) {
      if (r.querySelector('td:nth-child(2)').textContent === name) {
        r.classList.add('highlighted');
      }
    });
  });
});

function resetHighlighting() {
  rows.forEach(function(row) {
    row.classList.remove('highlighted');
  });
}

答案 1 :(得分:0)

这是一个使用JQuery https://jsfiddle.net/3cehoh78/5

的解决方案
$(document).ready(function() {


    $( "tr" ).hover(function() {
     var search = $(this).find("td:eq(1)").text();

   $( ".highlight" ).removeClass("highlight");


     $("tr:contains('"+search+"')").addClass("highlight");
  }); /* END HOVER */

}); // end document ready

答案 2 :(得分:0)

这是使用vanilla-JavaScript的另一种方式。

jQuery(function () {
    //
   // add span and hide
   //
    jQuery('<span class="preis_ab">ab </span>').insertBefore('.WA_price2').hide();
    jQuery('#attribute149').on('change', function(e) {
         //
         // toggle visibility if the index of selected option is 1
         //
        jQuery('#WA_price .preis_ab').toggle(this.selectedIndex == 1);
        
        //
        // a different approach is: check if option with
        // value 28 is selected
        //
        //jQuery('#WA_price .preis_ab').toggle(
        //   jQuery('#attribute149 option[value=28]').is(':selected'));
    });
});

Demo