首先,我在C#中工作,在ASP.NET中,我有一个带有员工的DataList,名称在Labels中,属于ItemTemplate。
然后我需要一个JavaSript函数来捕获用户输入的文本并将其与Label的文本进行比较。如果退出巧合显示Row,否则隐藏它。
<asp:DataList ID="dt_usuario" runat="server" CellPadding="4" OnItemCommand="dt_usuario_ItemCommand"
ForeColor="#333333" BorderColor="Black" BorderStyle="Dashed" BorderWidth="1px" ItemStyle-BorderColor="Gray" ItemStyle-BorderStyle="Dashed" ItemStyle-BorderWidth="1px">
<AlternatingItemStyle BackColor="White" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<ItemStyle BackColor="#EFF3FB" />
<ItemTemplate>
<table>
<tr>
<td>
<asp:Label ID="lblid" runat="server" Visible="false" Text='<%# DataBinder.Eval(Container.DataItem, "id_usuario" )%>'></asp:Label>
</td>
<td style="width:450px;" title="emploee">
<asp:Label ID="lbl" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "nom_institucion") %>'></asp:Label>
</td>
<td>
<asp:LinkButton ID="lkreport" runat="server" Text="Reporte" CommandName="Reporte" class="btn btn-7 btn-7ba icon-reporte"><span><center>Imprimir</center></span></asp:LinkButton>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
<asp:TextBox ID="txtSeach" Width="400px" onkeyup="javascript:Seach(this)" runat="server"></asp:TextBox>
我试图创建自己的功能,但没有工作
function Seach(phrase)
{
var palabra = phrase.value.toLowerCase().split(" ");
var datalist = document.getElementById('<%=dt_usuario.ClientID%>');
for (var i = 0; i < datalist.length; i++)
{
var usuario = datalist.rows[i].getElementById("lblUsuario").value;
var institucion = datalist.rows[i].getElementById("lblInstitucion").value;
if (usuario.match(/palabra.*/) || institucion.match(/palabra.*/))
{
datalist.rows[i].visible = false;
}
}
}
</script>
我希望有人可以帮助我
答案 0 :(得分:1)
以下是您可以对代码进行的一些调整:
getElementById
方法,因此可以使用getElementsByClassName
方法。可以将一个公共类名称提供给搜索所针对的标签,以便可以通过一次调用来检索它们。span
元素,其内容由innerHTML
属性而不是value
提供。display
样式可用于显示/隐藏行,而不是visible
属性(不存在)。lblUsuario
和lblInstitucion
的标签,但我不会在您的标记中看到它们。我假设你在问题中复制/粘贴你的代码时会丢失它们。DataList中标签的典型标记:
<asp:Label ID="lblUsuario" runat="server" CssClass="fieldValue" Text='<%# DataBinder.Eval(Container.DataItem, "nom_usuario") %>' />
<asp:Label ID="lblInstitucion" runat="server" CssClass="fieldValue" Text='<%# DataBinder.Eval(Container.DataItem, "nom_institucion") %>' />
搜索功能:
function Search(phrase) {
var i, j, k;
var fields, foundMatch;
var palabra = phrase.value.toLowerCase().split(' ');
var datalist = document.getElementById('<%= dt_usuario.ClientID %>');
for (i = 0; i < datalist.rows.length; i++) {
foundMatch = false;
fields = datalist.rows[i].getElementsByClassName('fieldValue');
for (j = 0; j < palabra.length; j++) {
for (k = 0; k < fields.length; k++) {
if (fields[k].innerHTML.toLowerCase().indexOf(palabra[j]) >= 0) {
foundMatch = true;
break;
}
}
}
datalist.rows[i].style.display = foundMatch ? '' : 'none';
}
}
答案 1 :(得分:0)
我认为这就是你所追求的。您可以使用RegEx.IsMatch(input, pattern)
首先,添加using System.Text.RegularExpressions;
然后:
function Seach(phrase)
{
var word = phrase.value.toLowerCase().split(" ");
var datalist = document.getElementById('<%=dt_employee.ClientID%>');
for (var i = 0; i < datalist.length; i++)
{
var empl = datalist.rows[i].getElementById("lblemployee").value;
if (RegEx.IsMatch(empl, word))
{
datalist.rows[i].visible = false;
}
}
}