2017-03-29 37 views
1

我很高兴0123,存在。html数据属性中的高级数据结构

我可以写一个简单的字符串到html属性,并通过jquery访问它们。

但是....有没有比一个简单的字符串更好?

是否没有办法将JSON编码到这些数据属性中。

在我目前的用例中,我需要在html5数据属性中存储一个字符串列表。

+0

你不能在你的JavaScript中以其他方式嵌套这个列表?这是不是很好的分离关系... –

+0

你的意思就像....'$(“#ele”)。attr('data-example',JSON.stringify(new Array('1','2')) ))'? – Zze

+0

wouldnt一个JSON字符串的工作?像JSON.Stringify(Object)一样。 –

回答

0

您可以将json作为字符串放入data属性中并使用JSON.parse()来获取它。

1
<div id ="test" data-something='{"something":"something"}'></div> 

数据属性中的字符串会自动转换为JavaScript对象。

你可以在javascript中这样访问它。

var somethingObject = $("#test").data("something"); 

var jsonSomethingObject = JSON.stringify(somethingObject); 

console.log(somethingObject); //this will print the main javascript object 
console.log(jsonSomethingObject);// this will print stringify javascript object 

您可以参阅片断为同一

var someObject = $("#test").data("student"); 
 
    
 
var jsonData = JSON.stringify(someObject); 
 
    
 
$('#display').text("id:"+someObject.id +" name:"+someObject.name) 
 
console.log(someObject); 
 
console.log(jsonData);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="test" data-student='{"name": "Dhiraj", "id": 1}' /> 
 

 
<div id="display"></div>

+0

你能告诉我如何从jquery中访问这本字典吗?到现在为止,我想我得到一个简单的字符串。 – guettli

+0

在评论中查看最新的答案 – Dhiraj

0

好像你可以使用JSON.stringify

$("#ele").attr('data-example', JSON.stringify(new Array('1', '2'))); 
 

 
console.log($("#ele").attr('data-example'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div id='ele' data-example="nothing"></div>

0

您可以在data-属性中存储JSON字符串。

function onPClick(evt) { 
 
    var special = evt.target.getAttribute('data-special'); 
 
    if (special != null) { 
 
    try { 
 
     console.log("JSON", JSON.parse(special)); 
 
    } catch (error) { 
 
     console.log("STANDARD", special); 
 
    } 
 
    } else { 
 
    console.log("NULL"); 
 
    } 
 
} 
 
var ps = document.getElementsByTagName("p"); 
 
for (var pi = 0; pi < ps.length; pi++) { 
 
    var p = ps[pi]; 
 
    p.onclick = onPClick; 
 
}
<p>I am special!</p> 
 
<p data-special='YES!'>I am special!</p> 
 
<p data-special='{"a":"bob"}'>I am special!</p>

分离关注,这将是更漂亮,用于存放在一个地方,不必在每次它改变时更新HTML数据:

var p = document.body.appendChild(document.createElement("p")); 
 
p.innerHTML = "Click me!"; 
 
Object.defineProperty(p, 'mySuperSecretValue', { 
 
    value: 37, 
 
    writable: true, 
 
    enumerable: true, 
 
    configurable: true 
 
}); 
 
p.onclick = function pclick(evt) { 
 
    console.log(evt.target.mySuperSecretValue++, evt.target.outerHTML); 
 
};