DOM没有更新GET请求+数据属性

时间:2016-12-07 23:52:30

标签: javascript jquery

问题:在更新通过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更新外,一切都按预期工作。想法?

2 个答案:

答案 0 :(得分:2)

在元素上使用html()将获得对象的innerHTML,这是一个字符串。因此,在$()中使用它将导致jQuery创建未附加到DOM的新元素。如果你只是选择元素并修改它们,只需使用$(选择器)并修改它。不要使用html()并用$()包装结果。

答案 1 :(得分:1)

而不是$(selector).attr('data-name')尝试使用jQuery.data()文档中显示的$(selector).data('name')