我有一个使用中继器的 asp.net 项目。
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1">
<HeaderTemplate>
<asp:label ID="lblexp" runat="server" Text="05/11/1981" Visible="false"></asp:label>
</HeaderTemplate>
<ItemTemplate>
<div id="myNest" class="grid">
<div class="imgholder">
<img src="<%# Eval("ImageAlt1")%>" />
</div>
<strong><%# Eval("ItemName")%> <bdo style="color:green;">$<%# Eval("ItemPrice")%></bdo></strong>
<p class="test"><%# Eval("ItemDescription")%></p>
<div style="color:red; font-size:small;"><asp:Label ID="lblExp" Text='<%# Bind("CreateDate") %>' runat="server" /></div>
<div class="meta"><%# Eval("Email")%></div>
</div>
</ItemTemplate>
<FooterTemplate>
<asp:label ID="lblexp" runat="server" Text="05/11/1981" Visible="false"></asp:label>
</FooterTemplate>
和一些 JavaScript 来缩短 ItemDescription
<script type="text/javascript">
var after = 5;
var html = $(".grid p.test").html();
html = html.substring(0, after) + "<span> ...</span>";
$(".grid p.test").html(html);
</script>
无论出于何种原因,javascript 都无法看到中继器中的项目。我该如何解决这个问题?
错误为未捕获类型错误:无法读取未定义的属性子字符串
最佳答案
这里有两个可能的问题:
JS 在渲染相关标记之前运行。要解决这个问题,只需将您的 js 包装在某种文档加载处理程序中即可:
$(function() { var after = 5; var html = $(".grid p.test").html(); html = html.substring(0, after) + "<span> ...</span>"; $(".grid p.test").html(html); });
html()
调用为您提供选择器匹配列表中第一项的内部 html。您可能会对所有找到的项目执行此操作,在这种情况下,请将 html 操作放在each()
中。顺便说一句,请考虑使用text
而不是html
,它看起来与您的情况更相关。
关于javascript - 如何让我的 JavaScript 在中继器中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254629/