调用自定义数据属性中的函数
Call a function inside a custom data-attr?
给定我们正在使用的当前CMS,我需要在自定义数据属性中调用函数。是否可以将数据属性的内容作为函数调用以如下所示运行?简单的例子:
设置
<button data-function="alert('hello world')">Run Function</button>
跑
$('button').attr('function');
我相信以上只是获取内容,而不是在编写时实际执行任何内容。
这可能吗?
您可以从 data 属性创建一个Function
:
// create
var funcStr = $('button').data('function');
var f = new Function(funcStr);
// invoke
f();
参见 MDN
如果函数已知,这是另一种方法。
$(document).ready(function() {
$('button').click(function() {
var functionObject = JSON.parse($('button').attr('data-function'));
window[functionObject.name].apply(window, functionObject.arguments);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button data-function='{"name": "alert", "arguments" : ["hello world"]}'>Run Function</button>
它从 data-function
属性解析 JSON 字符串。使用 window 对象调用 name
提供的函数(消除 eval
),并使用 apply
将参数(在数组内)传递给函数。
如果要执行代码,则必须调用eval
。您还需要使用该属性的全名,或使用 .data()
。
eval($('button').attr('data-function'));
或
eval($('button').data('function');
您可以随时使用 eval 函数。
eval($('button').attr('data-function'));
相关文章:
- 序列化数据属性中对象的最可靠方法
- jQuery最近父级的数据属性选择器
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 函数jquery.html()不提供数据属性集值
- 从 Bootstrap Typeahead 中的数据属性中调用函数
- 将数据属性从锚点元素传递到jQuery函数
- 调用自定义数据属性中的函数
- 通过内联数据属性传递Javascript函数
- JQuery从单击函数中检索数据属性
- 使用数据属性在一个函数中Jquery多个选择器
- 在下面的场景中,如何在$.ajax()函数的数据属性中发送参数
- 如何在fancybox2回调函数中读取数据属性
- 将数据存储为函数的属性
- 将回调函数作为html数据属性传递
- 创建一个切换数据*属性的jQuery函数
- jquery更多点击函数使用数据属性
- 使用多个值在一个jquery过滤函数中的数据属性的例子
- 传递具有自定义数据属性的函数
- jQuery:为每个点击函数添加多个数据属性
- 如何使用find()函数根据数据属性查找元素