我有一个 HTML 表格,如http://jsfiddle.net/Lijo/auny3/所示。该表有 10 列 - 分为三个列组。我需要使用“Show Associate”和“Hide Associate”按钮隐藏/显示名为“Associate Info”的colgroup(包括其行数据)。
使用 jQuery 执行此操作的最佳方式(就性能而言)是什么?
如果您有比http://jsfiddle.net/Lijo/auny3/8/更好的答案,请回答
参考:
选择的答案
我有一个 HTML 表格,如http://jsfiddle.net/Lijo/auny3/所示。该表有 10 列 - 分为三个列组。我需要使用“Show Associate”和“Hide Associate”按钮隐藏/显示名为“Associate Info”的colgroup(包括其行数据)。
使用 jQuery 执行此操作的最佳方式(就性能而言)是什么?
如果您有比http://jsfiddle.net/Lijo/auny3/8/更好的答案,请回答
参考:
选择的答案
嗨,现在习惯了
jQuery
$(document).ready(function(){
$("#show").click(function(){
$("#showhide").show();
});
$("#hide").click(function(){
$("#showhide").hide();
});
})
并对您的 html 进行一些更改
或者你可以使用nth-child
选择器:
$('input').click(function(){
if($(this).val() == "Hide Associate"){
$('th:nth-child(2), td:nth-child(2), th:nth-child(3):not(:first), td:nth-child(3), th:nth-child(4), td:nth-child(4), th:nth-child(5), td:nth-child(5)').hide();
}else{
$('th:nth-child(2), td:nth-child(2), th:nth-child(3):not(:first), td:nth-child(3), th:nth-child(4), td:nth-child(4), th:nth-child(5), td:nth-child(5)').show();
}
});
在这里,使用您当前的 HTML,并且如果您的 Associate Info 标头存储了更多列(脚本正在寻找其colspan
属性以获取适当数量的列),它将继续工作。
$("input").on("click", function(e){
e.preventDefault();
var label = $(".resultGridTable .tableColGroupAssociate"),
colspan = parseInt(label.attr("colspan"), 10),
associate = $("tr:gt(0)")
.find("th:gt(0):lt("+ colspan +"), td:gt(0):lt("+ colspan +")")
.add(label);
if($(this).val() == 'Hide Associate') associate.hide();
else associate.show();
});
我已经概括了@Pioul 提供的想法。因此,如果您喜欢这个答案,也请为@Pioul 投票。这种通用方法可在http://jsfiddle.net/Lijo/UqdQp/10/中找到
参考:
代码
var associateStartElementString = "EmpID";
var financialStartElementString = "Type";
var associateHTMLElements;
var financialHTMLElements;
var associateHideClass = '.tableColGroupAssociate';
var financialHideClass = '.tableColGroupTransaction';
$(document).ready(function () {
////////Hide Sections
//Associate Hide
$('.associateHide').live("click", function (e) {
e.preventDefault();
var hideClass = associateHideClass;
associateHTMLElements = HideSection(hideClass, associateStartElementString);
$('.btnAssociate').show();
});
//Financial Hide
$('.financialHide').live("click", function (e) {
e.preventDefault();
var hideClass = financialHideClass ;
financialHTMLElements = HideSection(hideClass, financialStartElementString);
$('.btnFinancial').show();
});
////SHOW
$('.btnAssociate').click(function()
{
associateHTMLElements.show();
var firstHeaderLineElement = $(".resultGridTable").find(associateHideClass );
firstHeaderLineElement.show();
});
$('.btnFinancial').click(function()
{
financialHTMLElements.show();
var firstHeaderLineElement = $(".resultGridTable").find(financialHideClass );
firstHeaderLineElement.show();
});
//Function 1
function HideSection(hideClass, startElementString)
{
var htmlElement = GetTableSections(hideClass, startElementString);
var firstHeaderLineElement = $(".resultGridTable").find(hideClass);
var variableToSet;
if (!(htmlElement === undefined)) {
variableToSet = htmlElement;
htmlElement.hide();
firstHeaderLineElement.hide();
}
return variableToSet;
}
//Function 2
function GetTableSections(hideClass, referenceHeaderCellValue) {
var firstHeaderLineElement = $(".resultGridTable").find(hideClass);
var colspan = parseInt(firstHeaderLineElement.attr("colspan"));
var startElementIndex = GetNonColSpanIndex(referenceHeaderCellValue);
if (startElementIndex > 0) {
startElementIndex = (startElementIndex - 1);
var selectedElements = $("tr:gt(0)")
.find("th:gt(" + startElementIndex + "):lt(" + colspan + "), td:gt(" + startElementIndex + "):lt(" + colspan + ")");
return selectedElements;
}
}
//Function 3
function GetNonColSpanIndex(referenceHeaderCellValue) {
var selectedCell = $("th").filter(function (i) {
return ($.trim($(this).html())) == referenceHeaderCellValue;
});
var allCells = $(selectedCell).parent('tr').children();
var normalIndex = allCells.index($(selectedCell));
var nonColSpanIndex = 0;
allCells.each(
function (i, item) {
if (i == normalIndex)
return false;
var colspan = $(selectedCell).attr('colspan');
colspan = colspan ? parseInt(colspan) : 1;
nonColSpanIndex += colspan;
}
);
return nonColSpanIndex;
};
}
);