【问题标题】:How to get a collection of input elements by name attribute如何通过名称属性获取输入元素的集合
【发布时间】:2011-07-30 17:02:52
【问题描述】:

我有一个看起来像这样的表格:

<form method="post" enctype="multipart/form-data" onsubmit="return new_post_form_submit();">    
<input type="hidden" name="task" value="addPost">   
<input type="hidden" name="post_photo_edit[]" value="0">    
<input type="hidden" name="post_photo_edit[]" value="0">
<input type="hidden" name="post_photo_edit[]" value="0">
 ... 
</form>

new_post_form_submit 函数中,我想选择所有名为post_photo_edit 的元素作为一个集合。如您所见,它的名称实际上是post_photo_edit[],因为我想将它作为我的 PHP 代码中的一个数组。

我正在使用 MooTools,但 jQuery 可能会为此提供完全相同的解决方案。

我试过打电话

$$("input[name='post_photo_edit[]']")

但它给了我一个例外。并这样称呼它:

$$("input[name='post_photo_edit']")

返回空集合。

我知道我可以改为这样

document.getElementsByName("post_photo_edit[]")

它会完美运行,但我想知道这个表达式在 MooTools 中应该是什么样子才能像上面那样工作。

有什么想法吗?

【问题讨论】:

    标签: javascript jquery forms mootools css-selectors


    【解决方案1】:

    功能:$$

    选择和扩展 DOM 元素。返回一个 Elements 实例。返回的 Element 实例是一个类数组对象,支持每一个 Array 方法和每一个 Element 方法。

    语法:

    var myElements = $$(argument);

    参数:

    • 选择器 - (字符串)CSS 选择器
    • elements - (elements), (collection) or (array) 一个可枚举的元素列表
    • element, element - (element) 任意数量的元素作为参数

    返回:

    • (elements) - 一个类似数组的 Elements 集合,包含所有匹配的 DOM 元素,扩展为 document:id。

    所以你应该使用:$$(document.getElementsByName("post_photo_edit[]"));

    CSS3 支持字符转义,因此您可以使用反斜杠来转义字符:

    但您也可以像这样转义数组运算符:$$("input[name=post_photo_edit\[\]]")

    【讨论】:

    • 这个$$("input[name=post_photo_edit\[\]]") 会很完美,但它不起作用
    • 我在 google chrome 下的 jsfiddle 中试过,效果很好。 jsfiddle.net/WSkQs
    • 你说得对,它正在工作,但是......我正在使用一些旧的 MooTools 版本,在 jsfiddle 上的 1.1 下它也不起作用,在 1.25 下它返回 0,在 1.3 下它可以正常工作应该。谢谢!
    • 如果您尝试使用 Mootools/这样做来绕过 IE8 的 DOM 遍历限制,这在 IE8 中不起作用。
    【解决方案2】:

    不确定 MooTools,但要选择具有以某事物开头的属性的每个元素,您可以这样做:

    $('input[name^="post_photo_edit"]')
    

    您可以在这里查看:jQuery starts With Selector

    【讨论】:

    • 感谢您的提示,实际上是$$('input[name^="post_photo_edit"]')。 MooTools 正在使用W3C CSS3 selectors
    • 感谢您的输入 :) 修复
    • 在IE下,至少8个,只有这个有效:[name~='post_photo_edit']
    【解决方案3】:

    您应该使用attribute starts with selector。在 MooTools 上也是如此

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      相关资源
      最近更新 更多