Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用多个选择器简化隐藏/显示,以便在单击时单独显示_Javascript - Fatal编程技术网

Javascript 使用多个选择器简化隐藏/显示,以便在单击时单独显示

Javascript 使用多个选择器简化隐藏/显示,以便在单击时单独显示,javascript,Javascript,有人能帮我简化这个代码段吗?我希望能够写更少的代码行,而不是用不同的选择器重复相同的代码(听起来像一个循环,但我不知道怎么做) 问题是,当我放置多个用逗号分隔的类时,它们不会单独显示隐藏的内容 $(document).ready(function(){ //hide show toggle Latest $(".more-text-latest, .more-text-latest-2").hide(); $(".read-more-latest").click(function(ev

有人能帮我简化这个代码段吗?我希望能够写更少的代码行,而不是用不同的选择器重复相同的代码(听起来像一个循环,但我不知道怎么做)

问题是,当我放置多个用逗号分隔的类时,它们不会单独显示隐藏的内容

$(document).ready(function(){


//hide show toggle Latest 

$(".more-text-latest, .more-text-latest-2").hide();

$(".read-more-latest").click(function(event){
 event.preventDefault();
$(".more-text-latest").slideToggle(600);
      $(this).toggleClass(".more-text-latest");
    });

$(".read-more-latest-2").click(function(){
$(".more-text-latest-2").slideToggle(600);
      $(this).toggleClass(".more-text-latest-2");
    });

如果您只想要一个做同样事情的循环,有几种方法可以实现它,例如:

$(document).ready(function () {
    //hide show toggle Latest 
    [
        '.read-more-latest',
        '.read-more-latest-2'
    ].forEach(function (selector) {
        var moreTextSelector = selector.replace('read-more', 'more-text');
        $(moreTextSelector).hide();

        $(selector).click(function (e) {
            e.preventDefault();

            $(moreTextSelector).slideToggle(600);
            $(this).toggleClass(moreTextSelector);

            if ($(this).hasClass(moreTextSelector)) {
                $(this).html('Return');
            }
            else {
                $(this).html('Read More');
            }
        });
    });
});

如果您只想要一个做同样事情的循环,有几种方法可以实现它,例如:

$(document).ready(function () {
    //hide show toggle Latest 
    [
        '.read-more-latest',
        '.read-more-latest-2'
    ].forEach(function (selector) {
        var moreTextSelector = selector.replace('read-more', 'more-text');
        $(moreTextSelector).hide();

        $(selector).click(function (e) {
            e.preventDefault();

            $(moreTextSelector).slideToggle(600);
            $(this).toggleClass(moreTextSelector);

            if ($(this).hasClass(moreTextSelector)) {
                $(this).html('Return');
            }
            else {
                $(this).html('Read More');
            }
        });
    });
});

这是一个只使用JavaScript的应用程序还是你有一些HTML示例?我正在构建这个:-这是一个只使用一些代码的简单网站。这是一个只使用JavaScript的应用程序还是你有一些HTML示例?我正在构建这个:-这是一个只使用一些代码的简单网站。这工作非常漂亮!我将重新应用代码到我的项目的其余部分。但这对我来说还是有点复杂。特别是调用事件以防止默认的部分。你能帮我理解-1和-2来自哪里吗?我还没有研究过事件。谢谢你们,海丹!另外,如果我想将“阅读更多”更改为单击后返回,反之亦然。我们可以把它添加到你的循环中吗?或者我需要构建另一个块吗?带-1的行只是if语句的简写,如果&&的左侧为true,则&&的右侧将运行,否则不会运行。在示例代码中,您在“.read-more-latest”的处理程序中调用了preventDefault(),但在“.read-more-latest-2”的处理程序中调用了preventDefault(),以便indexOf检查选择器中是否存在字符串“-2”,如果不存在,indexOf将返回-1并调用preventDefault()。不管怎样,我相信你甚至不需要那一行,可以完全删除它。我不确定我是否完全理解第二件事,你想在点击按钮后更改按钮的文本以表示“返回”吗?嘿,海丹,再次感谢你。你帮了大忙。你是对的,我需要点击按钮说“返回”。你能在下面检查一下我做错了什么吗?我尝试将您的代码重新应用到代码的另一部分,但它不起作用。我分为两条评论,效果很好!我将重新应用代码到我的项目的其余部分。但这对我来说还是有点复杂。特别是调用事件以防止默认的部分。你能帮我理解-1和-2来自哪里吗?我还没有研究过事件。谢谢你们,海丹!另外,如果我想将“阅读更多”更改为单击后返回,反之亦然。我们可以把它添加到你的循环中吗?或者我需要构建另一个块吗?带-1的行只是if语句的简写,如果&&的左侧为true,则&&的右侧将运行,否则不会运行。在示例代码中,您在“.read-more-latest”的处理程序中调用了preventDefault(),但在“.read-more-latest-2”的处理程序中调用了preventDefault(),以便indexOf检查选择器中是否存在字符串“-2”,如果不存在,indexOf将返回-1并调用preventDefault()。不管怎样,我相信你甚至不需要那一行,可以完全删除它。我不确定我是否完全理解第二件事,你想在点击按钮后更改按钮的文本以表示“返回”吗?嘿,海丹,再次感谢你。你帮了大忙。你是对的,我需要点击按钮说“返回”。你能在下面检查一下我做错了什么吗?我尝试将您的代码重新应用到代码的另一部分,但它不起作用。我分成两条评论。