2014-05-22 77 views
0

我在网页上有以下内容主播:访问JQuery的数据JSON元素

<a href="#" data-json='{"first":"SGVsbG8=","last":"V29ybGQ=","mail":"aGVsbG9Ad29ybGQuY29t","favorite":"eWVz","answer":"VGhpcyBpcyBteSBhbnN3ZXJzIQ==","id":"MQ==","read":"yes"}'>Hello</a> 

<a href="#" data-json='{"first":"SGVsbG8=","last":"V29ybGQ=","mail":"aGVsbG9Ad29ybGQuY29t","favorite":"eWVz","answer":"VGhpcyBpcyBteSBhbnN3ZXJzIQ==","id":"MQ==","read":"no"}'>Hello</a> 

我想是read值变更数据,JSON来no为锚,其firstSGVsbG8=

我尝试以下,但没有工作:

($('.usr-list a').data('json').first == 'SGVsbG8=').each(function(i){$(this).data('json').read('no')}); 

这可能吗?

+5

是真正有效的标记?不应该在data-json中使用单引号,例如:'data-json =“{'first':'SGVsbG8 ='...' – Niklas

+1

@Niklas我刚刚从页面源复制,所以得到双引号 – user3555483

回答

1

是的,这是可能的。比较($('.usr-list a').data('json').first == 'SGVsbG8=')的结果是不具有each方法,用于过滤元素的布尔值,你应该通过他们迭代并阅读他们data-json属性:

$('a').each(function() { 
    var o = $(this).data('json'); 
    if (o.first === 'SGVsbG8=') { 
     o.read = 'no'; 
    } 
}); 

请注意,上面的代码不会改变data-json属性。 jQuery data方法解析data-*属性存储它们在内部。如果要在修改属性后更改属性,则应该JSON对对象进行编码并重置属性。

this.setAttribute('data-json', JSON.stringify(o)); 
1
function updateJson(object) { 
$("a").each(function() { 
    var json = $(this).data("json"); 
    if(json["first"]==object["first"]) { 
    json["read"] = "no"; 
    $(this).data("json",json); 
    } 
}); 
} 

updateJson({first : "SGVsbG8="}); 

这可以被用于此目的:)