javascript问题设置属性

时间:2011-08-01 14:50:19

标签: javascript jquery

我正在尝试以编程方式设置元素的属性,但是firebug不断给出错误:obj.setAttribute不是函数。我正在使用jQuery,所以我将展示一些额外的代码,以便您可以看到上下文。

代码如下:

$j(function(){
  function callback(response) {

        if (response.status == 200) {
            var data = response.responseBody;
            console.log(data)
            if (data.length > 0) {
                var artistData = $j.parseJSON(data);
                var marker = new google.maps.Marker({
                      position: new google.maps.LatLng(artistData.location.lat, artistData.location.lng),
                      map: map
                    });

                var obj =  document.getElementById('ratingRender').firstChild;
                obj.setAttribute("model", "[artist: deftones, rating: 4.0, artistID: 1]");
                document.getElementById('recommendedList').appendChild(obj);
            }
        }
        }

    $j.atmosphere.subscribe('${resource(dir: '/atmosphere/recommend')}',
        callback,
        $j.atmosphere.request = {transport: 'streaming'});

    $j('#buttonPost').click(function() {
        var searchedArtist = '${search.artist}';
        $j.get('${createLink(action: "recommend")}?artist=' + searchedArtist);
    });
});

和ratingRender div:

<div id="ratingRender" style="display: none">
    <g:render template="/artist/rate" model="[artist: deftones, rating: 3.0, artistID: 1]" />
</div>

任何想法为什么会发生这种情况? 非常感谢你!

更新

我试过这个:

var obj =  $('#ratingRender').children().eq(0);
obj.attr("model", "[artist: deftones, rating: 4.0, artistID: 1]");

并且它不再给出错误。但是,它也没有修改属性。我不知道为什么。任何人吗?

5 个答案:

答案 0 :(得分:0)

ratingRender的第一个子节点是仅包含空格的文本节点:

var obj =  document.getElementById('ratingRender').firstChild;
obj.setAttribute("model", "[artist: deftones, rating: 4.0, artistID: 1]");

答案 1 :(得分:0)

如果您正在使用jQuery,为什么不使用... jQuery?

var obj = $("#ratingRender").children().first();
obj.attr("model", "[artist: deftones, rating: 4.0, artistID: 1]");

答案 2 :(得分:0)

你的firstChild是空白。关于MDN docs

的说明

答案 3 :(得分:0)

为什么不使用jquery?试试这个

var obj =  $('#ratingRender').children().eq(0);
obj.attr("model", "[artist: deftones, rating: 4.0, artistID: 1]");

答案 4 :(得分:0)

当您进行DOM操作时,将本机API与jQuery API混合只会让您遇到麻烦。 jQuery使用包装器来允许你操作DOM,所以你不需要做setAttribute。相反,使用jQuery的attr方法。