我正在尝试以编程方式设置元素的属性,但是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]");
并且它不再给出错误。但是,它也没有修改属性。我不知道为什么。任何人吗?
答案 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
方法。