【问题标题】:Add data-attribute to selectize.js options将数据属性添加到 selectize.js 选项
【发布时间】:2016-07-30 11:32:21
【问题描述】:

我正在为我的项目使用 selectize.js。但我有数据属性的问题。我想将数据属性添加到选择选项中。 我有这样的默认选择:

<option data-open-balance="false" selected="selected" value="1">PNP.SI.080416</option>

但是当我将 selectize 添加到这个选择时,它变成:

<div data-value="1" data-selectable="" class="selected">PNP.SI.080416</div>

我看到它的“项目对象”只获取值和文本。那么,如何将其他数据属性添加到它的 item 对象中呢?

【问题讨论】:

    标签: javascript html ruby-on-rails selectize.js


    【解决方案1】:

    我看过文档,他们说如果你想为你的元素添加自定义属性,你应该使用dataAttr选项,默认是data-data。所以在你的情况下,代码看起来像这样:

    HTML

    <select>
        <option data-data='{"openBalance": true}' selected="selected" value="1">PNP.SI.080416</option>
    </select>
    

    JS

    这里我们提供了自定义渲染方法来使用我们需要的属性来绘制options:

    $('select').selectize({
        render: {
            option: function (data, escape) {
                return "<div data-open-balance='" + data.openBalance + "'>" + data.text + "</div>"
            }
        }
    })
    

    UDATE

    Kyborek 指出,为了保护您的网站或 Web 应用免受 XSS 的攻击,您应该在渲染回调中使用 escape 方法。如果您想在data.text 中显示html 标签,也可以使用它。更新后的示例将如下所示:

    $('select').selectize({
        render: {
            option: function (data, escape) {
                return "<div data-open-balance='" + escape(data.openBalance) + "'>" + escape(data.text) + "</div>"
            }
        }
    })
    

    【讨论】:

    • 如果有人想使用php可以使用这个&lt;option data-data='&lt;?php echo json_encode( $your_option ); ?&gt;' value='&lt;?php echo $value; ?&gt;'&gt;&lt;?php echo $text; ?&gt;&lt;/option&gt;。在 data-data 标签中使用单引号 ' 非常重要,因为 JSON 使用双引号 " 作为结构。
    • 投反对票,因为 JS 解决方案受 XSS 约束。如果 data.text 包含 html 标签或简单的&gt;,它将破坏下拉列表。为此提供了转义功能,以便您可以在返回数据之前转义数据。结果返回应该是:return "&lt;div data-open-balance='" + escape(data.openBalance) + "'&gt;" + escape(data.text) + "&lt;/div&gt;"
    • @Kyborek 虽然在我看来,这与问题无关,但我已经用你的笔记更新了我的答案,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-08-30
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 2011-06-30
    • 2014-07-11
    相关资源
    最近更新 更多