2011-08-01 113 views
0

我试图以编程方式设置元素的属性,但萤火虫不断给出错误:obj.setAttribute不是一个函数。我使用jQuery,所以我将显示一些额外的代码,以便您可以看到上下文。javascript问题设置属性

的代码如下:

$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> 

任何想法,为什么会出现这种情况? 非常感谢!

UPDATE

我试着用这样的:

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

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

+0

我认为它*可能与这个事实有关,这不是一个有效的属性,也不是一个有效的元素。 –

回答

0

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

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

ratingRender第一个孩子是只含有空格的文本节点:

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

如果你使用jQuery,为什么不使用jQuery的...?

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

当你在做DOM操作时,将本地API与jQuery API混合只会让你陷入困境。 jQuery使用包装来允许你操作DOM,所以你不需要做setAttribute。相反,使用jQuery的attr方法。