- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我试图在 dataset
属性中设置一些 json
数据。
HTML
看起来像这样
<div data-switch="true" data-json="{'key1': 'value 1'}, {'key2': 'value 2'}">
data-json
里面的数据我用JavaScript
获取的是这样的:
var json = $("[data-json]").data("json").toString();
json = JSON.stringify(json);
无论我尝试什么,它都不会将其转换为对象
。它只返回一个 string
使用 toString()
和 stringify()
$(function() {
json = $("[data-json]").data("json").toString();
json = JSON.stringify(json);
json = JSON.parse(json);
console.log(json);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-json="{'key1': 'value 1'}, {'key2', 'value 2'}">
</div>
当我删除 toString()
和 stringify()
函数时,出现以下错误:Uncaught SyntaxError: Unexpected token ' in JSON at position 1
没有 toString()
和 stringify()
$(function() {
json = $("[data-json]").data("json");
json = JSON.parse(json);
console.log(json);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-json="{'key1': 'value 1'}, {'key2', 'value 2'}">
</div>
摆弄原始的 JavaScript
和 HTML
/**
* Switch content inside Metro UI blocks
*
* @requires {data-switch} Set data-switch="true" inside the dom
*/
$(function() {
/**
* Get all switch elements
*/
var switches = $("[data-switch]");
/**
* Sample data for each switch element
var switches_data = {
0: {
0: {
image: 'https://cdn.elegantthemes.com/blog/wp-content/uploads/2016/02/rules-good-ui-design-web-project-thumbnail.png',
content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
},
1: {
image: 'http://www.fujitsu.com/fts/Images/28618-workplace-manager580x224_tcm21-1830661.jpg',
content: 'Aliquam interdum sit amet nibh aliquet accumsan.'
},
2: {
image: 'http://cdn.moneycrashers.com/wp-content/uploads/2013/03/manager2.jpg',
content: 'Vestibulum sed metus eu justo sagittis congue.'
}
},
1: {
0: {
image: 'https://cdn.elegantthemes.com/blog/wp-content/uploads/2016/02/rules-good-ui-design-web-project-thumbnail.png',
content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
},
1: {
image: 'http://www.fujitsu.com/fts/Images/28618-workplace-manager580x224_tcm21-1830661.jpg',
content: 'Aliquam interdum sit amet nibh aliquet accumsan.'
},
2: {
image: 'http://cdn.moneycrashers.com/wp-content/uploads/2013/03/manager2.jpg',
content: 'Vestibulum sed metus eu justo sagittis congue.'
}
},
2: {
0: {
image: 'https://cdn.elegantthemes.com/blog/wp-content/uploads/2016/02/rules-good-ui-design-web-project-thumbnail.png',
content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'
},
1: {
image: 'http://www.fujitsu.com/fts/Images/28618-workplace-manager580x224_tcm21-1830661.jpg',
content: 'Aliquam interdum sit amet nibh aliquet accumsan.'
},
2: {
image: 'http://cdn.moneycrashers.com/wp-content/uploads/2013/03/manager2.jpg',
content: 'Vestibulum sed metus eu justo sagittis congue.'
}
}
};
*/
/**
* Check if elements exists
*/
if(switches.length > 0) {
/**
* Loop through objects
*
* @var c Object Key
* @var e Object Value
*/
$.each(switches, function(c, e) {
/**
* Get switches data current object
*/
var switches_data = $(this).data("switches");
console.log(switches_data);
/**
* Get next div
*/
var next = $(this).children().first()[0];
next = $(next);
/**
* Set type animation
*/
var animation = "flipInX";
/**
* Set index where to start from
*/
var index = 0;
/**
* Generate interval seconds, a random number so they will never be the same
*/
var x = Math.floor((Math.random() * 6000) + 3000);
/**
* Loop through switches
*
* @var i Object Key
* @var b Object Value
*/
$.each(switches_data, function(i, b) {
/**
* Create new element for each switches
*/
var el = $("<div />").attr({class: "metro-ui-column-content animated", id: "content-column-" + i});
/**
* Append el to next element, previous defined
*/
el.appendTo(next);
/**
* Set background image for el
*/
el.css({
"background": "url("+ b.image +") no-repeat",
"background-size": "cover"
});
/**
* Append html content
*/
el.html( "<div class=\"metro-ui-column-html\">" + b.content + "</div>");
});
/**
* Set static this
*/
var self = $(this);
/**
* Find all animated object
*/
var animated = $(this).find(".animated");
/**
* Generate random number between 2000 and 4000, it acts as seconds for interval
*/
var x = Math.floor((Math.random() * 8000) + 4000);
/**
* Loop through animated objects
*
* @var i Object Key
* @var e Object Value
*/
$.each(animated, function(i, e) {
/**
* Start with the first animated object in the current loop
*/
if(i === 0) {
/**
* Start with an timeout with random generated content, so no content will ever be loaded at the same time
*/
setTimeout(function() {
/**
* Gets visible by setting the z-index
*/
$(e).css("z-index", 2).addClass("flipInX");
}, x);
}
});
/**
* Set new index higher than first object
*/
var index = 3 ;
/**
* Set interval function to start looping the animation
*/
setInterval(function() {
/**
* Get next object from current object
*/
var next = self.find(".flipInX").next();
/**
* If there is no next object reset to first object
*/
if(next.length === 0) {
/**
* Update next to first object cause next doenst exist
*/
var next = self.find(".animated").first();
}
/**
* Set new index and add animation class
*/
next.css("z-index", index++).addClass("flipInX").siblings().removeClass("flipInX");
}, x);
});
}
});
@import url('https://fonts.googleapis.com/css?family=Roboto:400,700');
body {
background-color: #f1f1f1;
font-family: 'Roboto', sans-serif;
font-size: 14px;
}
* {
box-sizing: border-box;
}
/* Metro theme UI */
.metro-theme-ui {
max-width: 450px;
margin: 40px auto;
height: 250px;
}
.metro-ui-row {
position: relative;
width: 100%;
min-height: 1px;
/* Fix breaking when height is 0 */
}
.metro-ui-row:after,
.metro-ui-row:before {
display: table;
content: " ";
clear: both;
}
.metro-ui-column {
position: relative;
background: #12A7CC;
padding: 50px;
box-shadow: 1px 1px 2px #ccc;
overflow: hidden;
}
.metro-ui-column.fadeIn {
animation: fadeIn .33s ease;
}
.metro-ui-column.fadeOut {
animation: fadeOut .33s ease;
}
.metro-ui-column .metro-ui-column-content {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
.metro-ui-column .metro-ui-column-html {
background: rgba(0, 0, 0, 0.5);
position: absolute;
color: #fff;
left: 0;
top: 0;
width: 100%;
height: 100%;
padding: 10px;
}
/* Calculate column width */
.metro-ui-col {
padding: 2px;
float: left;
}
.metro-ui-col-10 {
width: calc(100%);
}
.metro-ui-col-9 {
width: calc(11.11111111%);
}
.metro-ui-col-8 {
width: calc(12.5%);
}
.metro-ui-col-7 {
width: calc(14.28571429%);
}
.metro-ui-col-6 {
width: calc(16.66666667%);
}
.metro-ui-col-5 {
width: calc(20%);
}
.metro-ui-col-4 {
width: calc(25%);
}
.metro-ui-col-3 {
width: calc(33.33333333%);
}
.metro-ui-col-2 {
width: calc(50%);
}
.metro-ui-col-1 {
width: calc(100%);
}
/* Keyframes */
.animated {
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.animated.infinite {
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
}
.animated.hinge {
-webkit-animation-duration: 2s;
animation-duration: 2s;
}
.animated.flipOutX,
.animated.flipOutY,
.animated.bounceIn,
.animated.bounceOut {
-webkit-animation-duration: .75s;
animation-duration: .75s;
}
@keyframes flipInX {
from {
left: -100%;
}
to {
left: 0;
}
}
.metro-ui-column .metro-ui-column-content.flipInX {
-webkit-animation-name: flipInX;
animation-name: flipInX;
-webkit-backface-visibility: visible !important;
backface-visibility: visible !important;
}
@keyframes flipOutX {
from {
-webkit-transform: perspective(400px);
transform: perspective(400px);
}
30% {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 0deg);
transform: perspective(400px) rotate3d(1, 0, 0, 0deg);
opacity: 1;
}
to {
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
opacity: 0;
}
}
.flipOutX {
-webkit-animation-name: flipOutX;
animation-name: flipOutX;
-webkit-backface-visibility: visible !important;
backface-visibility: visible !important;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="metro-theme-ui">
<div class="metro-ui-row">
<div class="metro-ui-col metro-ui-col-10">
<div class="metro-ui-column"></div>
</div>
</div>
<div class="metro-ui-row">
<div class="metro-ui-col metro-ui-col-3" data-switch="true" data-switches='{"image": "https://cdn.elegantthemes.com/blog/wp-content/uploads/2016/02/rules-good-ui-design-web-project-thumbnail.png", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit."}, { "image": "http://www.fujitsu.com/fts/Images/28618-workplace-manager580x224_tcm21-1830661.jpg", "content": "Aliquam interdum sit amet nibh aliquet accumsan."}, { "image": "http://cdn.moneycrashers.com/wp-content/uploads/2013/03/manager2.jpg", "content": "Vestibulum sed metus eu justo sagittis congue." }'">
<div class="metro-ui-column"></div>
</div>
<div class="metro-ui-col metro-ui-col-3">
<div class="metro-ui-column"></div>
</div>
<div class="metro-ui-col metro-ui-col-3">
<div class="metro-ui-column"></div>
</div>
</div>
<div class="metro-ui-row">
<div class="metro-ui-col metro-ui-col-3">
<div class="metro-ui-column"></div>
</div>
<div class="metro-ui-col metro-ui-col-3">
<div class="metro-ui-column"></div>
</div>
<div class="metro-ui-col metro-ui-col-3">
<div class="metro-ui-column"></div>
</div>
</div>
</div>
最佳答案
您实际上可以只传递一个有效的 json 对象,它应该可以正常工作。
json = $("[data-json]").data("json");
console.log(typeof(json))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div data-switch="true" data-json='[{"key1": "value 1"}, {"key2": "value 2"}]'>
关于javascript - 如何在 DOM `data` 属性中定义一个 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43848407/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
Polymer的light DOM和local DOM有什么区别?来自文档(1): The DOM that an element creates and manages is called its
当内容添加到网页时,我需要触发一个 Action 。更新可能具有不同的性质(例如 AJAX、延迟脚本、用户操作)并且不受我的控制。 我想使用 DOM 突变事件,但它们并非在所有浏览器中都可用。是否有为
我刚遇到一个有趣的情况,我有一个提交 放置在 内的 native 自定义元素的 Shadow DOM 内. Select #shadow-root ...
假设有一个滚动列表,当我插入一些新的 DOM 附加到当前 dom 时,它工作正常。上拉 但是如果我之前插入一些新的 DOM,新的 DOM 将在视口(viewport)中,而旧的 DOM 将被下推。下拉
在我的项目中实现 Shadow DOM 是否会使它们像 React 使用的虚拟 DOM 一样更快? 最佳答案 它们是不同用途的不同事物,因此比较性能没有意义。 虚拟 DOM 虚拟 DOM 旨在避免对
在我的页面内容上,我将多张卡片组织成网格 __________________ | ____ ____ | | | | | | | | | | | |
是否可以在浏览器中看到(调试)从 DOM 元素触发的自定义事件? 假设我想查看 Bootstrap Collapse 的哪个特定元素触发了 show.bs.collapse event ,我能以某种方
我正在生成用于客户端的 XPaths 服务器端,我很困惑为什么在 DOM 中找不到表路径(即 td 中的内容)。 事实证明,现代浏览器(至少是 Chrome 和 Firefox)插入了 tbody在文
是否可以检索文本节点的几何位置(即从父元素、页面等的顶部/左侧偏移量)? 最佳答案 不是直接的。 TextNode 没有用于测量视口(viewport)定位的原始 IE 偏移*(和类似的)扩展。 仅在
以下语句中的 DOM 元素的含义是什么? Statement #1 You can add multiple classes to a single DOM element. Statement #2
有没有办法让 firebug(或任何其他浏览器,或使用任何其他工具)阻止任何 dom 操作的发生?有时布局调试充满悬停事件的屏幕是不可能的,因为元素可能会消失,并且您看不到它们的复合布局。 最佳答案
我需要在html文档中搜索 text here 然后输出完整的节点路径(CSS或XPATH) 例如 html > body > div class ="something" > table > tr
这是我的一个页面的典型加载时间如何拆分为:- Domain Lookup 0 0 % Connect 134 .3% Request
我的 .on() 工作时遇到一些问题。我的网站是here . 如果你看看 www.eliteweb-creation.co.uk/dev/js/nav.js,我正在 mouseenter 和 mous
我是 Javascript 的新手,负责将我们产品的 UI 从 YUI2 迁移到 YUI3。看起来哪里都没有迁移指南,所以我现在正在浏览互联网帖子和 yui 文档。 在我的全局范围内,我临时添加了类似
我想和实习生一起测试一些 DOM 相关的东西,不需要特定的固定装置,只是一般的 DOM 东西,比如我改变了 Element.prototype。这是否需要通过本地 Selenium 服务器(或 sau
我是 HTML 和 HTML5 的初学者。 当我阅读以下内容时 link ,我找到了术语 DOM 和 DOM API。我通读了维基百科,但无法理解其背后的全部思想。 谁能给我解释一下: 文档对象模型
我有两个主要问题。 Object 之类的扩展是否算数? 什么是 DOM 包装? http://perfectionkills.com/whats-wrong-with-extending-the-do
对不起查询,原型(prototype),雅虎 YUI,道场在考虑小的时候不吸引我。我想要一个模块化的库,代码尽可能小,最多 20Kb [un compressed] 是我所期望的。应该提供 Dom 操
我是一名优秀的程序员,十分优秀!