在我的应用程序中,我正在构建学习rails和js,我有这个案例。扩展表格行以显示部分。帮助理解,看到这个图像:
edit-tag 的CSS可以设置为显示" none&#34 ;;这是表:
<table id="tags" class="table table-hover" style="background-color: white; word-wrap: break-word; font-size: 0.9em;" >
<thead>
<tr>
<th>Tagged content</th>
<th>as</th>
<th>in</th>
<th></th>
</tr>
</thead>
<tbody>
<% object.tags.each do |tag| %>
<% unless tag.content.blank? %>
<tr>
<td style="word-wrap: break-word;"><%= link_to tag.content, [object, tag], method: :patch %></td>
<td><%= tag.tagtype.name %></td>
<td><%= tag.tagtype.typeoftag %></td>
<td><%= link_to '', [object, tag], method: :delete, data: { confirm: 'Please confirm deletion!' }, :class => "glyphicon glyphicon-trash" %></td>
<tr id='edit-tag'>
<td colspan="5"><%= render 'tags/tag_update' %></td>
</tr>
</tr>
<% end -%>
<% end -%>
</tbody>
我在JS中创建了这个函数但它使用了ID
$(function() {
var DisplayTagEdit = document.getElementById('DisplayTagEdit');
DisplayTagEdit.onclick = function() {
var edittag = document.getElementById('edit-tag');
if (edittag.style.display !== 'none') {
edittag.style.display = 'none';
}
else {
edittag.style.display = 'block'
}
}
});
所以我的问题是:
答案 0 :(得分:1)
使用与object'id相关的唯一数据属性或类来识别它们,例如:
<tr data-tag-id='<%= tag.id >' class='show-tag'>
<td style="word-wrap: break-word;"><%= link_to tag.content, [object, tag], method: :patch %></td>
<td><%= tag.tagtype.name %></td>
<td><%= tag.tagtype.typeoftag %></td>
<td><%= link_to '', [object, tag], method: :delete, data: { confirm: 'Please confirm deletion!' }, :class => "glyphicon glyphicon-trash" %></td>
</tr>
<tr data-tag-id='<%= tag.id %>' class='edit-tag'>
<td colspan="5"><%= render 'tags/tag_update' %></td>
</tr>
在js中(我在这里使用Jquery):
$(".edit-tag").on("click", function(event) {
var tagId = $(this).data("tagId");
var $showRow = $("tr.show-tag[data-tag-id=" + tagId + "]"); // here you get the references of the row you need.
// do want you want ................
$showRow.toggle();
});
在Rails中,我们有“conteng_tag_for”,它将id信息添加到dom元素。
<%= content_tag_for :tr, tag do %>
<td style="word-wrap: break-word;"><%= link_to tag.content, [object, tag], method: :patch %></td>
<td><%= tag.tagtype.name %></td>
<td><%= tag.tagtype.typeoftag %></td>
<td><%= link_to '', [object, tag], method: :delete, data: { confirm: 'Please confirm deletion!' }, :class => "glyphicon glyphicon-trash" %></td>
<% end %>
将生成html,如:
<tr id='tags_16' class='tags'> <!-- assume tag'id is 16 -->
<td>......</td>
<td>......</td>
<td>......</td>
<td>......</td>
</tr>
答案 1 :(得分:0)
这通常有效(包括显示和隐藏其他行):
$("td.show-tag").on("click", function(event) {
var tagId = $(this).data('tagid');
$('tr.edit-tag').not($('tr.edit-tag[data-tagid='+tagId+']')).hide();
$('tr.edit-tag[data-tagid='+tagId+']').toggle();
});
<强>更新强>
上面的代码使用display:block 要使用display:table-row(跨越所有列中包含一个td的行),请使用.css()
$("#tags td.show-tag").on("click", function(event) {
var tagId = $(this).data('tagid');
$('tr.edit-tag').not($('tr.edit-tag[data-tagid='+tagId+']')).css("display", "none");
$('tr.edit-tag[data-tagid='+tagId+']').css("display", "table-row");
});
尚未进入我的视线。
不需要自己的JS!可以通过将Bootstap collapse.js
应用于表格来实现。
<tr id='heading<%= tag.id %>', role="button", data-toggle="collapse", data-parent="tags", class='show-tag', href="#collapse<%= tag.id %>", aria-expanded="true" aria-controls="collapse<%= tag.id %>">
<td style="word-wrap: break-word;"><%= tag.content %></td>
<td><%= tag.tagtype.name %></td>
<td><%= tag.tagtype.typeoftag %></td>
<td class="delete-btn"><%= link_to '', [object, tag], method: :delete, data: { confirm: 'Please confirm!' }, :class => "glyphicon glyphicon-trash" %></td>
</tr>
<tr id='collapse<%= tag.id %>', class='collapse' aria-labelledby="collapse"<%= tag.id %>">
<td colspan="4"><%= render 'shared/tester' %><%#= render partial: 'tags/update', object: @tag.tagable, tag: @tag %></td>
</tr>