说我有一个元素,我想通过一次点击传达2个或更多的数据......
<a class="quickie" data="['jan',1]" >week 1</a>
<a class="quickie" data="['jan',2]" >week 2</a>
<a class="quickie" data="['jan',3]" >week 3</a>
...and so forth.
$( '.quickie' ).click( function() {
var dataArray = JSON.stringify( $( this ).attr( 'data' ) );
var month = dataArray[0];
var week = dataArray[1];
});
这似乎将整个字符串视为一个数组,每个字符都是它自己的元素。 我想&#34; JSON.stringify()&#34;会解决这个问题,但事实并非如此。
请帮助。直接javascript或jquery都可以。
答案 0 :(得分:4)
JSON.stringify
将对象转换为JSON字符串。
data
属性中有一个JSON字符串,您希望解析作为JavaScript对象。
使用 JSON.parse
var dataArray = JSON.parse( $( this ).attr( 'data' ) );
答案 1 :(得分:3)
html
data="['jan',1]"
返回
Uncaught SyntaxError: Unexpected token '
尝试替换
<a class="quickie" data='["jan",1]'>week 1</a>
<a class="quickie" data='["jan",2]'>week 2</a>
<a class="quickie" data='["jan",3]'>week 3</a>
的
<a class="quickie" data="['jan',1]" >week 1</a>
<a class="quickie" data="['jan',2]" >week 2</a>
<a class="quickie" data="['jan',3]" >week 3</a>
另外,在.click()
处理程序结束时似乎是语法错误;尝试替换
});
的
)};
利用JSON.parse
来解析.data()
处的字符串,而不是JSON.stringify
,它返回对象的字符串表示,而不是从data-*
属性
$(".quickie").click( function() {
var dataArray = JSON.parse($( this ).attr("data"));
var month = dataArray[0];
var week = dataArray[1];
console.log(dataArray, month, week);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a class="quickie" data='["jan",1]'>week 1</a>
<a class="quickie" data='["jan",2]'>week 2</a>
<a class="quickie" data='["jan",3]'>week 3</a>
答案 2 :(得分:0)
很好 - 解决方案是两个建议的组合......
谢谢大家。