在 JSON 数据中添加 HTML 元素
Adding HTML elements in the JSON data
以下是我的 JSON 使用 JSONLint 验证的数据:
[{
"text": "Products",
"data": {},
"children": [{
"text": "Fruit",
"data": {
"price": "",
"quantity": "",
"AddItem": "+",
"RemoveItem": "×"
},
"children": [{
"text": "Apple",
"data": {
"price": 0.1,
"quantity": 20,
"AddItem": "+",
"RemoveItem": "×"
}
}, {
"text": "Strawberry",
"data": {
"price": 0.15,
"quantity": 32,
"AddItem": "+",
"RemoveItem": "& #215"
}
}],
"state": {
"opened": false
}
}, {
"text": "Vegetables",
"data": {
"price": "",
"quantity": "",
"AddItem": "&# 43;",
"RemoveItem": "×"
},
"children": [{
"text": "Aubergine",
"data": {
"price": 0.5,
"quantity": 8,
"AddItem": "+",
"RemoveItem": "×"
}
}, {
"text": "Cauliflower",
"data": {
"price": 0.45,
"quantity": 18,
"AddItem": "+",
"RemoveItem": "×"
}
}, {
"text": "Potato",
"data": {
"price": 0.2,
"quantity": 38,
"AddItem": "+",
"RemoveItem": "×"
}
}]
}],
"state": {
"opened": false
}
}]
我正在寻找的是将键 AddItem 和 RemoveItem 的值转换为 HTML 按钮.
以上JSON将用于渲染jsTree plugin中的节点。
jsFiddle link 我将在其中使用此 json 数据。基本上,我想用相同的按钮替换我的 + 和 - 符号
有人对此有变通办法吗?
编辑 1: 我在一些地方读到,直接在 JSON 数据中添加 HTML 元素是不可取的,因为它可以使用在您的代码中的许多地方,每次它可能有不同的 HTML。如果有人有更好的方法,那就太好了。
我从未使用过 jsTree 插件,可能有更好的方法来解决您的问题,但这似乎符合我的要求。只需将其添加到您的代码末尾即可。
$(document).on('click','.jstree-table-wrapper', function() {//insted of document i would used jtrees containing div
$.each($('.jstree-table-cell span'),function(){
if($(this).html()=='+'){
$(this).html('<button class="addBtn">+</button>')
}else if($(this).html()=='×'){
$(this).html('<button class="removeBtn">x</button>')
}
});
});
$(document).on('click','.addBtn',function(){//insted of document i would used jtrees containing div
var id = 'j1_'+$(this).parent().parent().attr('id').split('_')[2];
demo_create(id);
$('.jstree-table-wrapper').trigger('click');
});
$(document).on('click','.removeBtn',function(){//insted of document i would used jtrees containing div
var id = 'j1_'+$(this).parent().parent().attr('id').split('_')[2];
demo_delete(id);//you might need to work on your delete function
$('.jstree-table-wrapper').trigger('click');
});
以下是我的 JSON 使用 JSONLint 验证的数据:
[{
"text": "Products",
"data": {},
"children": [{
"text": "Fruit",
"data": {
"price": "",
"quantity": "",
"AddItem": "+",
"RemoveItem": "×"
},
"children": [{
"text": "Apple",
"data": {
"price": 0.1,
"quantity": 20,
"AddItem": "+",
"RemoveItem": "×"
}
}, {
"text": "Strawberry",
"data": {
"price": 0.15,
"quantity": 32,
"AddItem": "+",
"RemoveItem": "& #215"
}
}],
"state": {
"opened": false
}
}, {
"text": "Vegetables",
"data": {
"price": "",
"quantity": "",
"AddItem": "&# 43;",
"RemoveItem": "×"
},
"children": [{
"text": "Aubergine",
"data": {
"price": 0.5,
"quantity": 8,
"AddItem": "+",
"RemoveItem": "×"
}
}, {
"text": "Cauliflower",
"data": {
"price": 0.45,
"quantity": 18,
"AddItem": "+",
"RemoveItem": "×"
}
}, {
"text": "Potato",
"data": {
"price": 0.2,
"quantity": 38,
"AddItem": "+",
"RemoveItem": "×"
}
}]
}],
"state": {
"opened": false
}
}]
我正在寻找的是将键 AddItem 和 RemoveItem 的值转换为 HTML 按钮.
以上JSON将用于渲染jsTree plugin中的节点。
jsFiddle link 我将在其中使用此 json 数据。基本上,我想用相同的按钮替换我的 + 和 - 符号
有人对此有变通办法吗?
编辑 1: 我在一些地方读到,直接在 JSON 数据中添加 HTML 元素是不可取的,因为它可以使用在您的代码中的许多地方,每次它可能有不同的 HTML。如果有人有更好的方法,那就太好了。
我从未使用过 jsTree 插件,可能有更好的方法来解决您的问题,但这似乎符合我的要求。只需将其添加到您的代码末尾即可。
$(document).on('click','.jstree-table-wrapper', function() {//insted of document i would used jtrees containing div
$.each($('.jstree-table-cell span'),function(){
if($(this).html()=='+'){
$(this).html('<button class="addBtn">+</button>')
}else if($(this).html()=='×'){
$(this).html('<button class="removeBtn">x</button>')
}
});
});
$(document).on('click','.addBtn',function(){//insted of document i would used jtrees containing div
var id = 'j1_'+$(this).parent().parent().attr('id').split('_')[2];
demo_create(id);
$('.jstree-table-wrapper').trigger('click');
});
$(document).on('click','.removeBtn',function(){//insted of document i would used jtrees containing div
var id = 'j1_'+$(this).parent().parent().attr('id').split('_')[2];
demo_delete(id);//you might need to work on your delete function
$('.jstree-table-wrapper').trigger('click');
});