引用当前正在使用的 HTML 选择控件
我有一个 javascript 程序,通过在输入(文本)框中键入正则表达式来过滤 HTML 选择控件中的内容列表。我可以执行以下操作来正确过滤特定的选择控件:
$(function() {
$('input[data-filterable]').keyup(
function() {
filter = new filterlist(document.myform.myselect);
filter.set(this.value);
});
});
但我使用了名为 data-filterable 的自定义属性(现在可以在 HTML5 中执行此操作)。该属性会存储要过滤的select控件的名称,以便JS可以使用该控件的名称来过滤列表。这将是一个好主意,因为我将有一个通用功能来过滤任何选择框而不是特定的选择框。
我有什么想法如何做到这一点?我需要在 HTML 中添加类似的内容:
<input data-filterable='{"to":"#selectbox1"}' size="30" type="text" />
但我不确定我在这里做什么以及如何处理 JS。
谢谢你们:)。
I have a javascript program to filter a list of things in a HTML select control by typing a regular expression into an input (text) box. I can do the following to correctly filter a specific select control:
$(function() {
$('input[data-filterable]').keyup(
function() {
filter = new filterlist(document.myform.myselect);
filter.set(this.value);
});
});
but I have used a custom attribute (something one can now do in HTML5) called data-filterable. The attribute will store the name of the select control that is to be filtered so that JS can use the name of the control to filter the list. This would be a good idea because I will have a general function to filter any select box rather than a specific one.
Any ideas how I do this? I need something like this in the HTML:
<input data-filterable='{"to":"#selectbox1"}' size="30" type="text" />
but I'm not sure exactly what I'm doing here and what to do with the JS.
Thanks guys :).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
试试这个:
要分解表达式
$($(this).data('filterable'))[0]
:$(this)
包装this< /code> 在 jQuery 包装器中。在我们的上下文中,由于它是 jQuery keyup 事件处理程序,因此
this
引用DOM 节点。
$(this).data('filterable')
以字符串形式检索data-filterable
属性的内容。在我们的例子中,它是#selectbox1
。之后,该字符串作为选择器传递给 jQuery:
$($(this).data('filterable'))
。最后,我们获取返回数组的第 0 个元素,它应该是目标选择框的 DOM 元素。当然,如果没有适合选择器的选择框,这将非常失败。如果您怀疑这是真实场景,请首先检查返回数组的
.length
。Try this:
To break down the expression
$($(this).data('filterable'))[0]
:$(this)
wrapsthis
in a jQuery wrapper. In our context, since it's a jQuery keyup event handler,this
references the<input>
DOM node.$(this).data('filterable')
retrieves the contents of thedata-filterable
attribute as a string. In our case, it's#selectbox1
.After that this string gets passed in to jQuery as a selector:
$($(this).data('filterable'))
.Finally, we take the 0'th element of the returned array which should be the DOM element of the target selectbox. Of course, if there isn't a selectbox which fits the selector this will fail rather miserably. If you suspect that this is a real scenario, check the
.length
of the returned array first.