2

我正在尝试构建一个盒子容器,当单击“阅读更多”按钮时会展开,并在单击同一按钮(现在是“折叠”按钮)时折叠到初始大小。

在 DOM 中,我在容器.leer-mas内有一个按钮。.post以及以下 jQuery 代码:

//When link with class .leer-mas is clicked, get the parent element's id and add some css attributes
$('.leer-mas').click(function() {
    var item = $(this).closest('.post');
    item.css('height', 'auto');
    $(this).addClass('leer-menos');
    $(this).text('Leer menos');         
});


//When link with class .leer-mas is clicked, get the parent element's id and remove some css attributes
$('.leer-mas.leer-menos').click(function() {
    var item = $(this).closest('.post');
    item.removeAttr('height');
    $(this).removeClass('leer-menos');
})

第一个动作就像一个魅力。但是第二个动作什么都不做......而且我认为我缺少 jQuery 的一些基础知识,因为语法是相同的,也许这不是它应该的方式:)

有任何想法吗?谢谢。

编辑 - 我的代码有一些错误。尽管我仍在尝试使用单个切换器来获得它,但我有一个工作版本。

新的 DOM 看起来像这样:

<div class="post">
    <div class="leer mas">
    </div>
    <div class="leer menos">
    </div>
</div>

代码现在如下所示:

//When link with class .leer-mas is clicked, get the parent element's id (which is also that element's id in the database)
$('.leer.mas').click(function() {
    var item = $(this).closest('.post');
    //Send the id to the PHP script, which returns 1 if successful and 0 if not
    item.css('height', 'auto');
    $(this).hide();
    $(this).next('.leer.menos').show();
});


//When link with class .leer-mas is clicked, get the parent element's id (which is also that element's id in the database)
$('.leer.menos').click(function() {
    var item = $(this).closest('.post');
    //Send the id to the PHP script, which returns 1 if successful and 0 if not
    item.removeAttr('style');
    $(this).hide();
    $(this).prev('.leer.mas').show();
});

这工作顺利。但是,如果我让它使用原始问题的预期结构(使用单个按钮),我会更高兴:)

4

3 回答 3

2

这是因为类leer-menos是动态添加的......所以当执行事件注册代码时,没有带有类leer-mas和的元素leer-menos

一个可能的解决方案是使用事件委托

//When link with class .leer-mas is clicked, get the parent element's id and remove some css attributes
$(document).on('click', '.leer-mas.leer-menos', function() {
    var item = $(this).closest('.post');
    item.removeAttr('height');
    $(this).removeClass('leer-menos');
})
于 2013-09-13T16:42:12.660 回答
1

您正在尝试使用.removeAttr()删除属性“样式”中的 CSS 属性。这是不正确的,请尝试使用item.removeAttr('style');

于 2013-09-13T16:48:59.783 回答
1

不完全符合您的要求,但您可以从中汲取灵感:

$('.leer-mas').click(function() {
    var item = $(this).closest('.post');
    // toggle "height" between 'auto' and null
    item.css('height', item.css('height') == 'auto' ? null : 'auto' );
    // toggle class 'leer-menos'
    $(this).toggleClass('leer-menos');
    // toggle text between 'Leer menos' and ''
    $(this).text( $(this).is('.leer-menos') ? 'Leer menos' : '' );         
});
于 2013-09-13T16:49:08.587 回答