你如何将文本作为javascript数组传递?

时间:2015-06-28 18:59:29

标签: javascript jquery

说我有一个元素,我想通过一次点击传达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都可以。

3 个答案:

答案 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)

很好 - 解决方案是两个建议的组合......

1 - 必须改变我的引用结构&#34; - 这有点令人沮丧,但是很好

2 - 然后JSON.parse使用更新的引号

谢谢大家。