问题:在更新通过GET请求检索的图像的src时,DOM永远不会更新,但它们的新值会显示在控制台中。
可疑原因:我认为使用数据属性存在一些冲突,但使用attr()而不是data()似乎无法解决问题。
要更新的HTML
<div class="data-block">
<img data-item="hp-logo" />
<img data-item="hp-banner" />
</div>
获取请求:
if(promoid != null) {
$.get({
url: '/snippets/data.html',
cache: false
}).then(function(data){
var tempData = $('<output>').append($.parseHTML(data)).find('.data[data-promo-id="' + promoid + '"]');
myContent = tempData.html();
dataItems = $('.data-block').html();
//console.log('Data Items On Page: ', dataItems);
$(dataItems).each(function (index, value) {
if( $(this).is('[data-item]')) {
//console.log('Data Items With Attribute: ', this);
dataItemLookup = $(this).attr('data-item');
//console.log('Data Item Lookup Value: ', dataItemLookup);
$(myContent).each(function (index, value) {
//console.log('Retrieved Items Checking Against: ', this);
if ( $(this).attr('data-alias') == lastalias ) {
//console.log('Retrieved Items Match Alias: ', this);
if ($(this).attr('data-item') == dataItemLookup) {
//console.log('Retrieved Item Match', this);
dataImageDesktop = $(this).attr('data-image-desktop');
//console.log('Value to be Passed to Data Item: ', dataImageDesktop);
} else {
// Do nothing
}
} else {
// Do nothing
}
});
$(this).attr('src', dataImageDesktop);
console.log(this);
}
});
});
}
data.html:
<div class="data-container">
<div class="data" data-promo-id="11202016">
<div data-alias="test.html" data-item="hp-logo" data-image-desktop="http://placehold.it/250x150"></div>
<div data-alias="test.html" data-item="hp-banner" data-image-desktop="http://placehold.it/350x250"></div>
<div data-alias="not-test.html" data-item="hp-spot" data-image-desktop="http://placehold.it/450x350"></div>
</div>
</div>
不确定如何继续解决此问题。除DOM更新外,一切都按预期工作。想法?
答案 0 :(得分:2)
在元素上使用html()
将获得对象的innerHTML,这是一个字符串。因此,在$()中使用它将导致jQuery创建未附加到DOM的新元素。如果你只是选择元素并修改它们,只需使用$(选择器)并修改它。不要使用html()并用$()包装结果。
答案 1 :(得分:1)
而不是$(selector).attr('data-name')
尝试使用jQuery.data()文档中显示的$(selector).data('name')
。