从数据绑定属性迭代键值对
Iterate Key Value Pairs From Data-Bind Attribute
我想使用 javascript 从数据绑定属性迭代每个键和值。你有什么想法吗?我应该使用某种substring
和使用el.getAttribute('data-bind')
后split
.
下面是一个简单的例子:
<div data-bind="innerHTML: text, style: { color: color, width: '500px', height: '500px', backgroundColor: 'green' }"></div>
我想使用 pure javascript
进行迭代,从innerHTML
和style
键中逐个获取值。
将字符串转换为 json 对象。然后使用键来获取价值。您需要按如下方式更新您的 HTML。
// all values of the attribute must be quoted with single quote. i.e. It should be innerHTML : 'text' not innerHTML : text
<div data-bind="innerHTML: 'text', style: { color: 'color', width: '500px', height: '500px', backgroundColor: 'green' }"></div>
var attributeValue = document.getElementsByTagName("div")[0].getAttribute("data-bind");
var json = JSON.stringify(eval('({' + attributeValue + '})'));
然后你需要解析 json 对象,然后调用键值,如下所示:
var parsedJSON = JSON.parse(json);
alert(parsedJSON["innerHTML"]);
alert(parsedJSON["style"]["width"]);
js小提琴
如果要遍历样式属性,请尝试以下方式,
for(var attr in parsedJSON["style"]){
alert(attr + " : " + parsedJSON["style"][attr]);
}
js小提琴
看看 Knockout.js 的绑定源代码。与所有解析一样,魔鬼在细节中,这就是为什么它如此复杂!您可以使用 lib 中的parseObjectLiteral
函数knockout.js
并循环访问键,例如:
function enumerateProperties(str, items) {
var n, i,
arr = parseObjectLiteral(str);
if (!str) { return 0; }
for (i = 0; i < arr.length; i += 1) {
if (arr[i].key) {
n = enumerateProperties(arr[i].value, items);
if (n == 1) {
items.push({
key: arr[i].key,
value: arr[i].value
});
}
}
}
return arr.length;
}
这是使用敲除解析功能的工作小提琴。
这可能有点作弊,但谁在乎呢。 :P 将其包装为对象并使用eval
.(这不是有效的 JSON。
eval('({' + theStuffFromDataBind + '})')
相关文章:
- 正在数组中存储键值对
- 如何将新的键/值对元素添加到现有数组
- 在键值对中对求和值进行下划线
- 返回由键/值对定义的数组
- 在url参数javascript中存储键值对列表
- 将数组转换为键值对
- jQueryAJAX-将额外的键/值对推送到序列化的$_POST数组中
- 使用jQuery从ajax调用访问键值对
- 将动态键值对传递给函数
- d3使用键值对对对多个值的数据进行分组
- 通过json值进行迭代
- JS在封装对象中查找键值对
- 如何在角度UI树中获取某个项目的键值或迭代
- 从数据绑定属性迭代键值对
- AngularJs:迭代键值对的奇怪结果
- javascript对输入的持续时间值进行迭代并相加
- 在angular中正确迭代键值对
- 是否有一种方法来迭代和显示json的键值对列表使用Handlebar.js
- Angularjs:用键值对迭代数组
- 迭代javascript对象并动态添加对象属性(JS对象中的键值对)