2011-12-18 2 views
0

Я заменяю некоторый код в старом приложении, и вместо того, чтобы получить узел по его идентификатору, я получаю его по его классу. Поскольку нет хорошего способа получить узел по своему классу в native JS, я делаю это с помощью jQuery, однако новый код не изменяет img src.Изменение изображения src с jQuery

Есть ли очевидная причина?

Старый код:

var gamearea = document.getElementById('gamearea') 
var images = gamearea.getElementsByTagName('img'); 
images[place] = "pics/" + id + ".png"; 

Новый код:

$('.gamearea').children('img').eq(place).src = "pics/" + id + ".png"; 
+0

Что ваш HTML наценка? –

+2

Есть «хорошие» способы получить элементы по их «className» (без селекторов). Вы просто близоруки. Как сказал Дэвид, отправьте свой HTML-код, чтобы можно было найти лучшее решение. –

+0

@Matt: правда, что есть хорошие способы, такие как 'document.getElementsByClassName()', jQuery * делает * упрощает кросс-браузер, компенсируя ИЛИ. –

ответ

1

.eq() возвращает объект JQuery. Если вы хотите использовать .src свойство напрямую, вам нужен DOM элемент (не объект JQuery), для которого вы будете использовать .get() вместо .eq() так:

$('.gamearea').find('img').get(place).src = "pics/" + id + ".png"; 

Я также перешел на .find() вместо .children() быть более эквивалентный .getElementsByTagName(), который у вас был в оригинальной версии, и поскольку вы не показывали нам свой HTML, это кажется более безопасным предположением.

+0

Работает как очарование, спасибо! – holyredbeard

2

Try:

$('.gamearea').children('img').eq(place)[0].src = "pics/" + id + ".png"; 

или:

$('.gamearea').children('img').eq(place).attr("src", "pics/" + id + ".png"); 

$('.gamearea').children('img').eq(place) возвращает массив массивов jQuery, вы не можете получить доступ к атрибутам DOM непосредственно на этом объекте. Вам нужно либо потянуть элемент DOM, используя [0] (первый элемент), либо использовать метод из jQuery api, в данном случае .attr().

Кроме того, вы можете означать использовать $('#gamearea') вместо $('.gamearea') если вы заменяете getElementById('gamearea');

3
function updateGameAreaImages(id, place) { 
    var gameareas = toArray(document.getElementsByClassName('gamearea')); 
    gameareas.forEach(updateImages); 

    function updateImages(elem) { 
     var images = elem.getElementsByTagName("img"); 
     images[place].src = "pics/" + id + ".png"; 
    } 
} 

function toArray(obj) { 
    var arr = []; 
    for (var i = 0, len = obj.length; i < len; i++) { 
     arr[i] = obj[i]; 
    } 
    return arr; 
} 
1

Я знаю, что это старый ответ, но, конечно, это лучший способ ...

$('.gamearea').children('img').attr("src", "pics/" + id + ".png"); 
Смежные вопросы