2017-08-16 94 views
0

在此示例https://jsfiddle.net/erv79u0w/中,單擊「全選」時,所有相應的值在表格中高亮顯示。使用jquery有條件地進行高亮顯示

是否有可能以突出ONLY值表上的同一行現有在一起。例如,當選擇「全部選擇」時,第一個值(A,B,X,Y)只會突出顯示在同一行中的值。在這種情況下,它只是表格中的第二行。所以只有第二行的值應該突出顯示。

在同一行中的單元格而不是不應突出顯示,如下圖所示。

enter image description here

$('.selector').each(function() { 
 
    $(this).on('click', check); 
 
}); 
 

 
$('.all').each(function() { 
 
    $(this).on('click', all); 
 
}); 
 

 
function all(event) { 
 
    if ($(this).is(':checked')) { 
 
    $("input:checkbox:not(:checked)", $(this).parents('form')).not(this).prop("checked", "checked"); 
 
    } else { 
 
    $("input:checkbox(:checked)", $(this).parents('form')).not(this).prop("checked", ""); 
 
    } 
 

 
    //$('.selector').prop("checked", this.name === "SelectAll"); 
 

 
    check(event); 
 
} 
 

 
function check(event) { 
 
    var checked = $(".selector:checked").map(function() { 
 
    return this.name 
 
    }).get() 
 
    $('td').removeClass("highlight").filter(function() { 
 
    return $.inArray($(this).text(), checked) >= 0 
 
    }).addClass("highlight") 
 
    if ($(this).is(".selector")) 
 
    $('.all').not(this).prop("checked", false) 
 
}
.highlight { 
 
    background: #9ac99d; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    <div id="sidebar1"> 
 

 
     <div id="container"> 
 
     <div id="sidebar1"> 
 
      <h3>Parameters:</h3> 
 
      <form id="form1" name="form1" method="post" action=""> 
 
      <label> 
 
       <input type="checkbox" name="SelectAll" class="all" />Select All</label> 
 
      <label> 
 
       <input type="checkbox" name="A" class="selector" />A</label> 
 
      <label> 
 
       <input type="checkbox" name="B" class="selector" />B</label> 
 
      <label> 
 
       <input type="checkbox" name="X" class="selector" />X</label> 
 
      <label> 
 
       <input type="checkbox" name="Y" class="selector" />Y</label> 
 
      </form> 
 
      <form id="form2" name="form2" method="post" action=""> 
 
      <label> 
 
       <input type="checkbox" name="SelectAll" class="all" />Select All</label> 
 
      <label> 
 
       <input type="checkbox" name="K" class="selector" />K</label> 
 
      <label> 
 
       <input type="checkbox" name="J" class="selector" />J</label> 
 
      <label> 
 
       <input type="checkbox" name="M" class="selector" />M</label> 
 
      <label> 
 
       <input type="checkbox" name="T" class="selector" />T</label> 
 
      </form> 
 
     </div> 
 
     
 
     <div id="mainContent"> 
 
     <h3 align="right">&nbsp;</h3> 
 
     <div> 
 
      <table width="200" border="1"> 
 
      <tr> 
 
       <td>A</td> 
 
       <td>&nbsp;</td> 
 
       <td>M</td> 
 
       <td>&nbsp;</td> 
 
       <td>K</td> 
 
       <td>J</td> 
 
      </tr> 
 
      <tr> 
 
       <td>&nbsp;</td> 
 
       <td>B</td> 
 
       <td>A</td> 
 
       <td>&nbsp;</td> 
 
       <td>Y</td> 
 
       <td>X</td> 
 
      </tr> 
 
      <tr> 
 
       <td>&nbsp;</td> 
 
       <td>Y</td> 
 
       <td>&nbsp;</td> 
 
       <td>J</td> 
 
       <td>T</td> 
 
       <td>&nbsp;</td> 
 
      </tr> 
 
      <tr> 
 
       <td>&nbsp;</td> 
 
       <td> X</td> 
 
       <td>&nbsp;</td> 
 
       <td>X</td> 
 
       <td>&nbsp;</td> 
 
       <td>Y</td> 
 
      </tr> 
 
      <tr> 
 
       <td>K</td> 
 
       <td>Q</td> 
 
       <td>&nbsp;</td> 
 
       <td>T</td> 
 
       <td>&nbsp;</td> 
 
       <td>Y</td> 
 
      </tr> 
 
      <tr> 
 
       <td>M</td> 
 
       <td>&nbsp;</td> 
 
       <td>T</td> 
 
       <td>K</td> 
 
       <td>J</td> 
 
       <td>Z</td> 
 
      </tr> 
 
      </table> 
 
     </div> 
 
     </div>

+0

你可以添加什麼是當前渲染的圖像和什麼是所需的?它不是很明確 – vsync

+0

@安德烈亞斯 - 問題被編輯,並且這是固定的 – vsync

+0

請清楚你想達到什麼目的。這個問題**非常**不清楚,並在關閉的邊界.. – vsync

回答

1

Array.prototype.compare = function(testArr) { 
 
    if (this.length != testArr.length) return false; 
 
    for (var i = 0; i < testArr.length; i++) { 
 
    if (this[i].compare) { //To test values in nested arrays 
 
     if (!this[i].compare(testArr[i])) return false; 
 
    } else if (this[i] !== testArr[i]) return false; 
 
    } 
 
    return true; 
 
} 
 
$(document).on('click', '.all', function() { 
 
    $('#mainContent table tr td').removeClass('highlight'); 
 
    if (!$(this).is(':checked')) { 
 
    $(this).closest('form').find('input.selector').prop('checked', false); 
 
    } 
 
    $('input[name=SelectAll]').each(function() { 
 
    if ($(this).is(':checked')) { 
 
     $(this).closest('form').find('input.selector').prop('checked', true); 
 
     processAllClick($(this)); 
 
    } else { 
 
     processIndividualClick($(this)); 
 
    } 
 
    }); 
 
}); 
 
$(document).on('click', '.selector', function() { 
 
    $('#mainContent table tr td').removeClass('highlight'); 
 
    if (!$(this).is(':checked')) { 
 
    $(this).closest('form').find('input.all').prop('checked', false); 
 
    } 
 
    $('input[name=SelectAll]').each(function() { 
 
    if ($(this).is(':checked')) { 
 
     processAllClick($(this)); 
 
    } else { 
 
     processIndividualClick($(this)); 
 
    } 
 
    }); 
 
}); 
 

 
function processIndividualClick(input) { 
 
    $(input).closest('form').find('input.selector:checked').each(function() { 
 
    $('td:contains(' + $(this).attr('name') + ')').addClass('highlight'); 
 
    }); 
 
} 
 

 
function processAllClick(input) { 
 
    var elems = []; 
 
    $(input).closest('form').find('input.selector:checked').each(function() { 
 
    elems.push($(this).attr('name')); 
 
    }); 
 
    $('#mainContent table tr').each(function() { 
 
    var child = []; 
 
    $(this).find('td').each(function() { 
 
     if ($.inArray($(this).text(), elems) != -1) 
 
     child.push($(this).text()); 
 
    }); 
 
    if (elems.sort().compare(child.sort())) { 
 
     for (var i = 0; i < child.length; i++) { 
 
     $(this).find('td').each(function() { 
 
      if ($(this).text() == child[i]) { 
 
      $(this).addClass('highlight'); 
 
      } 
 
     }); 
 
     } 
 
    } 
 
    }); 
 
}
.highlight { 
 
    background: #9ac99d; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="container"> 
 
    <div id="sidebar1"> 
 

 
    <div id="container"> 
 
     <div id="sidebar1"> 
 
     <h3>Parameters:</h3> 
 
     <form id="form1" name="form1" method="post" action=""> 
 
      <label> 
 
       <input type="checkbox" name="SelectAll" class="all" />Select All</label> 
 
      <label> 
 
       <input type="checkbox" name="A" class="selector" />A</label> 
 
      <label> 
 
       <input type="checkbox" name="B" class="selector" />B</label> 
 
      <label> 
 
       <input type="checkbox" name="X" class="selector" />X</label> 
 
      <label> 
 
       <input type="checkbox" name="Y" class="selector" />Y</label> 
 
     </form> 
 
     <form id="form2" name="form2" method="post" action=""> 
 
      <label> 
 
       <input type="checkbox" name="SelectAll" class="all" />Select All</label> 
 
      <label> 
 
       <input type="checkbox" name="K" class="selector" />K</label> 
 
      <label> 
 
       <input type="checkbox" name="J" class="selector" />J</label> 
 
      <label> 
 
       <input type="checkbox" name="M" class="selector" />M</label> 
 
      <label> 
 
       <input type="checkbox" name="T" class="selector" />T</label> 
 
     </form> 
 
     </div> 
 

 
     <div id="mainContent"> 
 
     <h3 align="right">&nbsp;</h3> 
 
     <div> 
 
      <table width="200" border="1"> 
 
      <tr> 
 
       <td>A</td> 
 
       <td>&nbsp;</td> 
 
       <td>M</td> 
 
       <td>&nbsp;</td> 
 
       <td>K</td> 
 
       <td>J</td> 
 
      </tr> 
 
      <tr> 
 
       <td>&nbsp;</td> 
 
       <td>B</td> 
 
       <td>A</td> 
 
       <td>&nbsp;</td> 
 
       <td>Y</td> 
 
       <td>X</td> 
 
      </tr> 
 
      <tr> 
 
       <td>&nbsp;</td> 
 
       <td>Y</td> 
 
       <td>&nbsp;</td> 
 
       <td>J</td> 
 
       <td>T</td> 
 
       <td>&nbsp;</td> 
 
      </tr> 
 
      <tr> 
 
       <td>&nbsp;</td> 
 
       <td> X</td> 
 
       <td>&nbsp;</td> 
 
       <td>X</td> 
 
       <td>&nbsp;</td> 
 
       <td>Y</td> 
 
      </tr> 
 
      <tr> 
 
       <td>K</td> 
 
       <td>Q</td> 
 
       <td>&nbsp;</td> 
 
       <td>T</td> 
 
       <td>&nbsp;</td> 
 
       <td>Y</td> 
 
      </tr> 
 
      <tr> 
 
       <td>M</td> 
 
       <td>&nbsp;</td> 
 
       <td>T</td> 
 
       <td>K</td> 
 
       <td>J</td> 
 
       <td>Z</td> 
 
      </tr> 
 
      </table> 
 
     </div> 
 
     </div>

所有點擊事件這裏處理

+0

這太好了。你改變了整個jQuery代碼。我需要一些時間來了解你的代碼。我會用它。非常感謝。 https://開頭的jsfiddle。net/max33/yb81rrpy/ – Max

+0

我正在用小的更改更新我的代碼,因此它也處理單個點擊。希望你在jsfiddle – gjijo

+0

有備份好,謝謝。我已準備好放棄單個點擊。 https://jsfiddle.net/34j92qjk/ – Max