如何使用多个 id 简化 JS
how to simplify the JS with multiple id's
我正在尝试创建多个带有 id 和 accordian 的选项卡,与 class 相同,我有下面的代码,它按预期工作正常,任何人都可以帮助简化这个
$("#tabs-1 .inmedia-card").slice(0, 6).css('display', 'flex');
var totalpost1 = $("#tabs-1 .inmedia-card").length;
if ($("#tabs-1 .inmedia-card").length > 6 ){
$("#tabs-1 .btn-clk-loadmr").css('display', 'inline-block');
$("#tabs-1 .btn-clk-loadmr").on('click', function (e) {
e.preventDefault();
$("#tabs-1 .inmedia-card:hidden").slice(0, 6).css('display', 'flex');
visiblepost1=$("#tabs-1 .inmedia-card:visible").length;
if ( visiblepost1 == totalpost1 ){
$("#tabs-1 .btn-clk-loadmr").css('display', 'none');
}
});
}
$("#tabs-2 .inmedia-card").slice(0, 6).css('display', 'flex');
var totalpost2 = $("#tabs-2 .inmedia-card").length;
if ($("#tabs-2 .inmedia-card").length > 6 ){
$("#tabs-2 .btn-clk-loadmr").css('display', 'inline-block');
$("#tabs-2 .btn-clk-loadmr").on('click', function (e) {
e.preventDefault();
$("#tabs-2 .inmedia-card:hidden").slice(0, 6).css('display', 'flex');
visiblepost2=$("#tabs-2 .inmedia-card:visible").length;
if ( visiblepost2 == totalpost2 ){
$("#tabs-2 .btn-clk-loadmr").css('display', 'none');
}
});
}
$(".tab-acrdion-body .inmedia-card").slice(0, 6).css('display', 'flex');
var totalpost = $(".tab-acrdion-body .inmedia-card").length;
if ($(".tab-acrdion-body .inmedia-card").length > 6 ){
$(".tab-acrdion-body .btn-clk-loadmr").css('display', 'inline-block');
$(".tab-acrdion-body .btn-clk-loadmr").on('click', function (e) {
e.preventDefault();
$(".tab-acrdion-body .inmedia-card:hidden").slice(0, 6).css('display', 'flex');
visiblepost=$(".tab-acrdion-body .inmedia-card:visible").length;
if ( visiblepost == totalpost ){
$(".tab-acrdion-body .btn-clk-loadmr").css('display', 'none');
}
});
}
您可以创建一个函数,将父元素传递给它并使用 $.find(..)
到 select 并修改所有不同的子元素,这里是一个示例:
function process($parent) {
$parent.find(".inmedia-card").slice(0, 6).css('display', 'flex');
var totalpost1 = $parent.find(".inmedia-card").length;
if ($parent.find(".inmedia-card").length > 6 ){
$parent.find(".btn-clk-loadmr").css('display', 'inline-block');
$parent.find(".btn-clk-loadmr").on('click', function (e) {
e.preventDefault();
$parent.find(".inmedia-card:hidden").slice(0, 6).css('display', 'flex');
visiblepost1=$parent.find(".inmedia-card:visible").length;
if ( visiblepost1 == totalpost1 ){
$parent.find(".btn-clk-loadmr").css('display', 'none');
}
});
}
}
process($("#tabs-1"));
process($("#tabs-2"));
$(".tab-acrdion-body").each(function(){
process($(this));
});
每个函数之间的所有变化都是主要的 id
选择器。因此,您可以通过在所有这些元素上使用公共 class 并在 jQuery 选择器中使用它来从父元素遍历以找到相关的子元素,从而使您的 JS 逻辑变干。试试这个:
$('.tab').each(function() { // add this class to all relevant elements
let $tab = $(this);
let $cards = $tab.find('.inmedia-card');
let totalPost = $cards.length;
$cards.slice(0, 6).css('display', 'flex');
if ($cards.length > 6) {
$tab.find('.btn-clk-loadmr').css('display', 'inline-block').on('click', function(e) {
e.preventDefault();
$tab.find('.inmedia-card:hidden').slice(0, 6).css('display', 'flex');
let visiblepost = $tab.find('.inmedia-card:visible').length;
if (visiblepost1 === totalpost1) {
$tab.find('.btn-clk-loadmr').hide();
}
});
}
});
我还强烈建议更改 .slice(0, 6).css('display', 'X')
逻辑以在您打开和关闭的父元素上使用 CSS class,但这取决于实现在你的 HTML 结构上。
我正在尝试创建多个带有 id 和 accordian 的选项卡,与 class 相同,我有下面的代码,它按预期工作正常,任何人都可以帮助简化这个
$("#tabs-1 .inmedia-card").slice(0, 6).css('display', 'flex');
var totalpost1 = $("#tabs-1 .inmedia-card").length;
if ($("#tabs-1 .inmedia-card").length > 6 ){
$("#tabs-1 .btn-clk-loadmr").css('display', 'inline-block');
$("#tabs-1 .btn-clk-loadmr").on('click', function (e) {
e.preventDefault();
$("#tabs-1 .inmedia-card:hidden").slice(0, 6).css('display', 'flex');
visiblepost1=$("#tabs-1 .inmedia-card:visible").length;
if ( visiblepost1 == totalpost1 ){
$("#tabs-1 .btn-clk-loadmr").css('display', 'none');
}
});
}
$("#tabs-2 .inmedia-card").slice(0, 6).css('display', 'flex');
var totalpost2 = $("#tabs-2 .inmedia-card").length;
if ($("#tabs-2 .inmedia-card").length > 6 ){
$("#tabs-2 .btn-clk-loadmr").css('display', 'inline-block');
$("#tabs-2 .btn-clk-loadmr").on('click', function (e) {
e.preventDefault();
$("#tabs-2 .inmedia-card:hidden").slice(0, 6).css('display', 'flex');
visiblepost2=$("#tabs-2 .inmedia-card:visible").length;
if ( visiblepost2 == totalpost2 ){
$("#tabs-2 .btn-clk-loadmr").css('display', 'none');
}
});
}
$(".tab-acrdion-body .inmedia-card").slice(0, 6).css('display', 'flex');
var totalpost = $(".tab-acrdion-body .inmedia-card").length;
if ($(".tab-acrdion-body .inmedia-card").length > 6 ){
$(".tab-acrdion-body .btn-clk-loadmr").css('display', 'inline-block');
$(".tab-acrdion-body .btn-clk-loadmr").on('click', function (e) {
e.preventDefault();
$(".tab-acrdion-body .inmedia-card:hidden").slice(0, 6).css('display', 'flex');
visiblepost=$(".tab-acrdion-body .inmedia-card:visible").length;
if ( visiblepost == totalpost ){
$(".tab-acrdion-body .btn-clk-loadmr").css('display', 'none');
}
});
}
您可以创建一个函数,将父元素传递给它并使用 $.find(..)
到 select 并修改所有不同的子元素,这里是一个示例:
function process($parent) {
$parent.find(".inmedia-card").slice(0, 6).css('display', 'flex');
var totalpost1 = $parent.find(".inmedia-card").length;
if ($parent.find(".inmedia-card").length > 6 ){
$parent.find(".btn-clk-loadmr").css('display', 'inline-block');
$parent.find(".btn-clk-loadmr").on('click', function (e) {
e.preventDefault();
$parent.find(".inmedia-card:hidden").slice(0, 6).css('display', 'flex');
visiblepost1=$parent.find(".inmedia-card:visible").length;
if ( visiblepost1 == totalpost1 ){
$parent.find(".btn-clk-loadmr").css('display', 'none');
}
});
}
}
process($("#tabs-1"));
process($("#tabs-2"));
$(".tab-acrdion-body").each(function(){
process($(this));
});
每个函数之间的所有变化都是主要的 id
选择器。因此,您可以通过在所有这些元素上使用公共 class 并在 jQuery 选择器中使用它来从父元素遍历以找到相关的子元素,从而使您的 JS 逻辑变干。试试这个:
$('.tab').each(function() { // add this class to all relevant elements
let $tab = $(this);
let $cards = $tab.find('.inmedia-card');
let totalPost = $cards.length;
$cards.slice(0, 6).css('display', 'flex');
if ($cards.length > 6) {
$tab.find('.btn-clk-loadmr').css('display', 'inline-block').on('click', function(e) {
e.preventDefault();
$tab.find('.inmedia-card:hidden').slice(0, 6).css('display', 'flex');
let visiblepost = $tab.find('.inmedia-card:visible').length;
if (visiblepost1 === totalpost1) {
$tab.find('.btn-clk-loadmr').hide();
}
});
}
});
我还强烈建议更改 .slice(0, 6).css('display', 'X')
逻辑以在您打开和关闭的父元素上使用 CSS class,但这取决于实现在你的 HTML 结构上。