【发布时间】:2012-10-16 15:40:49
【问题描述】:
我有这个包含事件的表,单击它的图标(箭头)我创建新行(称为子事件),然后将其添加到当前行下。我想点击同一个图标来隐藏它的子事件,但只有他的。现在,如果我点击一个新事件(不同的行),它将切换每个隐藏的行,即使它们与当前行无关......
只是我试图强制获取某种UntilNext,但我无法使该功能正常工作,并且通过我正在执行的简单循环 atm 它会跳过 oneEvent 但会触发每个子行而不是我想要的那个。
$('.JSONArrow').on("click", function () {
var image = $(this);
var Row = image.closest("tr");
Row.toggleClass("Opened");
if (Row.hasClass("Opened")) {
image.attr("src", "/Images/downArrow.png")
if (!(Row.hasClass("alreadyOpen"))) {
var id = image.attr("id");
$.get("/Home/Child/" + id, function (data) {
Row.after(data);
Row.addClass("alreadyOpen");
});
}
} else {
image.attr("src", "/Images/rightArrow.png");
}
var tr = Row.nextAll('tr');
for (i = 0; i < tr.length; i++) {
var eventClass = $(tr[i]).attr('class');
if (eventClass == 'ChildEvent')
$(tr[i]).slideToggle()
else {
if (eventClass == 'oneEvent')
return;
}
}
});
必须很简单才能使 nextUntil 仅在子行上工作,但到目前为止我还没有管理它,根据 jquery doc 它应该很简单:
var tr = Row.nextUntil('tr',$(".oneEvent"));
for (i = 0; i < tr.length; i++) {
var eventClass = $(tr[i]).attr('class');
if (eventClass == 'ChildEvent'){
$(tr[i]).slideToggle()
}
}
但我不能让它工作。任何人都可以指出如何做到这一点,或者使用另一个我不知道的 jquery 函数将选择链接(childEvent)到我的 Row 变量而不是其他变量的所有('tr')。
如果您不了解 asp 或 mvc4,我不确定人们是否会更了解 hthml,但这里是:编辑 ::
<div class="TableHolder">
<table id="mainTable">
<thead>
<tr class="header">
<th class="iconColumn">Child</th>
<th>Date </th>
.... other <th>
</th>
</tr>
</thead>
@Html.EditorFor(x => x.logs)
</table>
这就是每个说的表格行:
string dynamicClass = "";
if (Model.Parent == null )
{
dynamicClass = "oneEvent";
}
else
{
dynamicClass = "ChildEvent";
}
}
<tr class="@dynamicClass">
<td class="iconColumn">
@if (Model.Parent == null )
{
<img class="JSONArrow" id="@Model.EventID" src="~/Images/rightArrow.png"/>
}
</td>
<td>@Model.TimeUTC.ToString("dddd, dd MMMM yyyy")<br />@Model.TimeUTC.ToString("HH:mm:ss") </td>
.... other column
</tr>
我会尽量简化我所说的:
你有行。(事件)当你点击一行(事件)时,新的动态行出现在它下面(称为 ChildEvent)。
如果您第二次单击某行(事件),如果这些行存在于他之下,您将隐藏这些行,但前提是它们是 ChildEvent 类。
我当前的代码隐藏了桌子上的所有 ChildEvent,我只想隐藏点击的(事件)下的那些。
如果用户点击一个行(事件),它会显示(ChildEvent)如果它们存在,但只有与点击的行(事件)相关的(childEvent),而不是整个表的ChildEvent。
childEvent 只能在其相关事件下添加。
重新编辑:
row.nextUntil(".oneEvent", ".ChildEvent").slidetoggle();
这就是我想要的,以文字形式显示:切换我单击的那个下面的 tr,如果他们有 ChildEvent 类。测试直到你到达一个拥有 "oneEvent" 类的 tr。
我就是想不通参数去了哪里。
重新编辑:
<table>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
</table>
点击:
<table>
<tr class="oneEvent, Opened, alreadyOpened"></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
</table>
点击同一个事件
<table>
<tr class="oneEvent, alreadyOpened"></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
</table>
点击一个新的事件:
<table>
<tr class="oneEvent, alreadyOpened"></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
<tr class="oneEvent, Opened, alreadyOpened"></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
</table>
点击另一个新的事件
<table>
<tr class="oneEvent, alreadyOpened"></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=oneEvent></tr>
<tr class="oneEvent, Opened, alreadyOpened"></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class="oneEvent, Opened, alreadyOpened"></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
点击前一个事件:
<table>
<tr class="oneEvent, alreadyOpened"></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=oneEvent></tr>
<tr class="oneEvent, Opened, alreadyOpened"></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class="oneEvent, alreadyOpened"></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
点击第一个 OneEvent :
<table>
<tr class="oneEvent, Opened, alreadyOpened"></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class=oneEvent></tr>
<tr class="oneEvent, Opened, alreadyOpened"></tr>
<tr class=ChildEvent display = true></tr>
<tr class=ChildEvent display = true></tr>
<tr class="oneEvent, alreadyOpened"></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=ChildEvent display = false></tr>
<tr class=oneEvent></tr>
<tr class=oneEvent></tr>
【问题讨论】:
-
请向我们展示相关的 HTML。我怀疑如果您向我们展示实际的 HTML,我们可以将您的代码减少到只有几行,因为看起来您的代码中有很多冗余,但是我们需要知道 HTML 和类的确切结构才能知道最好的建议.
-
我对这句话感到困惑:
"select all('tr") that are direct child of my Row variable and not the others."你的Row变量已经是父tr。那么,为什么要选择作为当前tr子级的tr对象呢?你有嵌入式表格吗?再说一遍,你能明白为什么我们需要查看你的 HTML 吗? -
如果您真的来这里是为了回答问题以更清楚地说明您想要什么,我可以在几分钟内回答这个问题。
-
抱歉,这是晚餐休息时间。我的意思是逻辑子,不是html子(不是embed table,只是Row变量调用了ChildEvent,是自己下面添加的新行。
-
以后,我建议您在一个小时内无法回答相关问题时不要发布问题。当您发布问题时,您应该在接下来的 30 分钟内进行检查,看看人们是否理解您的问题或需要帮助来理解它。超过 90% 的观众将在第一个小时内观看。如果问题在那个时间窗口内不清楚,您将失去大部分获得好答案的机会。我下面的回答有用吗?
标签: jquery