Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   выбрать и изменить стиль элемента. Помогите найти ошибку (https://javascript.ru/forum/dom-window/21190-vybrat-i-izmenit-stil-ehlementa-pomogite-najjti-oshibku.html)

nabiullin11 31.08.2011 20:05

выбрать и изменить стиль элемента. Помогите найти ошибку
 
Народ, помогите плиз. Не могу понять почему не выбирает элемент
вот верстка
<div class="album" style="display: block; " id="98">
<div class="album_name" style="display: block; "><a class="showphoto" id="98">defaulalbum</a></div>
<div class="album_content" id="98" style="display: none; ">
<div class="photo" style="display: block; ">
<img src="images/usergalleries/99/tumb/cbe359900e5b4519df00e67adfbe0771.jpg" id="150">
</div>
</div>
<div class="clear" style="display: block; "></div>
</div>


<div class="album_content" id="98" style="display: none; "> - нужно изменить свойство. Пишу функцию
$('a.showphoto').live('click',function(){
        //$(this).parent().parent().$('.album_content').css('display', 'block');
        var idblock = "div#"+$(this).attr("id").toString() + " .album_content";
        var classblock = "div.album_content";
        alert (idblock);
        
        $(idblock).css('display', 'block');
    });


на classblock отлично срабатывает, на idblock никак(((

kadabrik 01.09.2011 00:00

id всегда должен быть уникальным, не должно быть два или более элементов с одним id, RTFM!

melky 01.09.2011 00:29

попробуйте такой способ. но помните, несколько элементов с одним ID - грех !

$('a.showphoto').live('click', function() {
    $("div").filter("#" + this.id)   // див с таким же id,как у ссылки
        .find(".album_content")   // эл с таким классом внутри этого div
             .css('display', 'block'); // устанавливаем display
});


Цитата:

Сообщение от kadabrik (Сообщение 123985)
id всегда должен быть уникальным, не должно быть два или более элементов с одним id, RTFM!

в jquery возможно всё

kadabrik 01.09.2011 10:37

Цитата:

Сообщение от melky (Сообщение 123986)
в jquery возможно всё

$('<div id="one"></div>').appendTo('body');
$('<span id="one"></span>').appendTo('body');
console.log($('#one'));//вернет только один элемент а не весь набор


Даже в jQuery чудес не бывает

nikita.mmf 01.09.2011 11:09

kadabrik,
$('body')
  .append( $("<div/>").attr('id', 'foo') )
  .append( $('<span/>').attr('id', 'foo') )
  .append( $('<p/>').attr('id', 'foo') )
;
console.log( $('[id="foo"]') );

Сколько элементов вернет jQuery?

kadabrik 01.09.2011 11:19

Цитата:

Сообщение от nikita.mmf (Сообщение 124028)
kadabrik,
$('body')
  .append( $("<div/>").attr('id', 'foo') )
  .append( $('<span/>').attr('id', 'foo') )
  .append( $('<p/>').attr('id', 'foo') )
;
console.log( $('[id="foo"]') );

Сколько элементов вернет jQuery?

$('#foo') - самый быстрый селектор, не надо есть суп вилкой используя $('[id="foo"]'), мы всетаки с DOM и HTML а не с XML работаем.

devote 01.09.2011 11:25

Цитата:

Сообщение от kadabrik
$('#foo') - самый быстрый селектор, не надо есть суп вилкой используя $('[id="foo"]'), мы всетаки с DOM и HTML а не с XML работаем.

Да он к тому что давно дом позволяет использовать много раз один и тот же id. Да не спорю при использовании $('#foo') jquery просто использует getElementById и при этом возвращает один элемент, ибо этот метод больше и не может вернуть... Но если юзать такой $('[id="foo"]') способ, jquery запускает querySelectorAll встроенный в браузер и она возвращает все совпавшие элементы.. Ну а в старых браузера jquery использует Sizzle

и да кстати, если сравнить по скорости работы двух методов:
document.getElementById('dv');
document.querySelectorAll('[id=dv]');
то querySelectorAll работает быстрее

devote 01.09.2011 11:45

Цитата:

Сообщение от kadabrik
$('#foo') - самый быстрый селектор, не надо есть суп вилкой используя $('[id="foo"]')

Так что стоит пересмотреть эти слова... Уже давно пора привыкать к тому что старое не всегда хорошо.

kadabrik 01.09.2011 12:00

Цитата:

Сообщение от devote (Сообщение 124030)
стати, если сравнить по скорости работы двух методов:
document.getElementById('dv');
document.querySelectorAll('[id=dv]');
то querySelectorAll работает быстрее

Это откуда такие выводы? Он по определению медленнее. В chrome getElementById в 25 раз быстрее querySelectorAll

SkyLight 01.09.2011 12:01

Только вот где логика, непонятно. Это ж если такое мнение устоится, то как потом обозначивать конкретный элемент? Мир рушится...


Часовой пояс GMT +3, время: 12:43.