Jquery 根据值的变化剔除每个条件标记

Jquery 根据值的变化剔除每个条件标记,jquery,html,knockout.js,Jquery,Html,Knockout.js,我有以下HTML/Knockout,我希望只有在有新日期时才会显示dayDividerdiv,即当天的消息显示在日期横幅下。通常情况下,我会将最后一个值保存在一个临时变量中,然后每次都检查它。但我对淘汰赛还很陌生,不知道从哪里开始 <div data-bind="foreach: SelectedConversation().messages()" class="messages"> <div class="row"> <div class=

我有以下HTML/Knockout,我希望只有在有新日期时才会显示
dayDivider
div
,即当天的消息显示在日期横幅下。通常情况下,我会将最后一个值保存在一个临时变量中,然后每次都检查它。但我对淘汰赛还很陌生,不知道从哪里开始

<div data-bind="foreach: SelectedConversation().messages()" class="messages">
    <div class="row">
        <div class="dayDivider"><hr/><span class="center-block" data-bind="text: moment(timestamp()).format('D MMM')"></span></div>
        <!-- ko if: personId() === @Model.PersonId-->
        <div class="talk-bubble tri-right right-top pull-right border">
            <div class="talktext">
                <span class="pull-left messageTime" data-bind="text: moment(timestamp()).format('D MMM - HH:mm')"></span>
                <span class="pull-right messageFrom" data-bind="text: personFullName()"></span><br/>
                <span class="pull-right messageBody" data-bind="text: message"></span>
            </div>
        </div>
        <!-- /ko -->
        <!-- ko if: personId() !== @Model.PersonId-->
        <div class="talk-bubble tri-right left-top border">
            <div class="talktext">
                <span class="pull-right messageTime" data-bind="text: moment(timestamp()).format('D MMM - HH:mm')"></span>
                <span class="pull-left messageFrom" data-bind="text: personFullName()"></span><br/>
                <span class="pull-left messageBody" data-bind="text: message"></span>
            </div>
        </div>
        <!-- /ko -->

   </div>





像这样的东西怎么样

<div class="dayDivider" data-bind="visible: $index > 0 && $parent[$index -1]().timestamp() !== timestamp()">

(括号可能需要添加/删除到该框中-我永远记不起是否有敲除!!)

$parent不是messages()或SelectedConversation()。相反,保存SelectedConversation()的是视图模型。因此,如果您想遵循Shawson的建议,请尝试以下方法:

visible: moment($parent.selectedConversation().messages()[$index() - 1]().timestamp()).diff(moment(timestamp()), 'days') > 0
下面是一个展示如何在foreach中使用$parent和$index的示例(请注意,父对象不是foreach中使用的列表):


所有这些都说明了,对于我的口味来说,你的html中的逻辑太多了。您可能需要考虑使消息对象更智能,因此他们知道何时应该显示日期div(顺便提一下,谁拥有它们,以及如果它们应该显示在右侧或左侧等)。.

我需要格式化时间戳,只是为了得到日期部分?嗯,很好的一点-是的,你可以将日期输入到时刻中,并使用它进行比较,就像;可见:$index>0&&moment($parent[$index-1]().timestamp()).diff(moment(timestamp()),'days')>0Thanks@Shawson它已关闭,但foreach似乎不允许访问父级中的其他元素,并且需要$index()'sNice!我更新了fiddle,以查看每个元素的一个元素——我昨天在jsfiddle上尝试了一个类似这样的例子,大约20分钟后,愤怒就消失了!