引用当前正在使用的 HTML 选择控件

发布于 2024-12-14 21:54:04 字数 637 浏览 0 评论 0原文

我有一个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

左岸枫 2024-12-21 21:54:04

试试这个:

<input data-filterable="#selectbox1" size="30" type="text" />

$(function() {
    $('input[data-filterable]').keyup(
        function() {
            filter = new filterlist($($(this).data('filterable'))[0]);   
            filter.set(this.value);
        });
});

要分解表达式 $($(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:

<input data-filterable="#selectbox1" size="30" type="text" />

$(function() {
    $('input[data-filterable]').keyup(
        function() {
            filter = new filterlist($($(this).data('filterable'))[0]);   
            filter.set(this.value);
        });
});

To break down the expression $($(this).data('filterable'))[0]:

$(this) wraps this 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 the data-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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文