Jump to content
  • 0

посоветуйте


maza
 Share

Question

Recommended Posts

  • 0

теоретически??? :)

на практике выходит , что дивов с одинаковым айди может быть не сколько... или допустим с классом одним и тем же (думаю в контексте поиска не играет роли) как узнать колличество?

Link to comment
Share on other sites

  • 0

> на практике выходит , что дивов с одинаковым айди может быть не сколько...

Распространенное заблуждение. На прктике, если у тебя на странице несколько элементов с одинаковым id, тебя пора увольнять.

Link to comment
Share on other sites

  • 0

Ogalig, так я так и делаю (ищем див с id="OverlayContainer"):

   if(document.getElementById('OverlayContainer')) {
var BodyHeight = document.body.offsetHeight+'px';
var DivOverlays = document.getElementsByTagName('div');
for (var i = 0; i < DivOverlays.length; i++) {
if(DivOverlays[i].id == 'OverlayContainer') {
DivOverlays[i].style.height=BodyHeight;
}
}
}

homm, мну уволнять? :) за что?? это ведь не я пишу такие скрипты, а Samuel birch (http://www.phatfusion.net/)

Link to comment
Share on other sites

  • 0
homm, мну уволнять? :) за что?? это ведь не я пишу такие скрипты, а Samuel birch (http://www.phatfusion.net/)

Давай разберемся. Этот самуэль пишет такие скрипты, или страницы с несколькими элементами с одинаковыми id ?

Link to comment
Share on other sites

  • 0

выходит, что так :)

вот принт-скрин дебагера:

screen_over_samuel.gif

overlay.js

/**************************************************************

Script : Overlay
Version : 1.2
Authors : Samuel birch
Desc : Covers the window with a semi-transparent layer.
Licence : Open Source MIT Licence

**************************************************************/

var Overlay = new Class({

getOptions: function(){
return {
colour: '#000',
opacity: 0.7,
zIndex: 1,
container: document.body,
onClick: Class.empty
};
},

initialize: function(options){
this.setOptions(this.getOptions(), options);

this.options.container = $(this.options.container);

this.container = new Element('div').setProperty('id', 'OverlayContainer').setStyles({
position: 'absolute',
left: '0px',
top: '0px',
width: '100%',
zIndex: this.options.zIndex
}).injectInside(this.options.container);

this.iframe = new Element('iframe').setProperties({
'id': 'OverlayIframe',
'name': 'OverlayIframe',
'src': 'java script:void(0);',
'frameborder': 1,
'scrolling': 'no'
}).setStyles({
'position': 'absolute',
'top': 0,
'left': 0,
'width': '100%',
'height': '100%',
'filter': 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)',
'opacity': 0,
'zIndex': 1
}).injectInside(this.container);

this.overlay = new Element('div').setProperty('id', 'Overlay').setStyles({
position: 'absolute',
left: '0px',
top: '0px',
width: '100%',
height: '100%',
zIndex: 2,
backgroundColor: this.options.colour
}).injectInside(this.container);

this.container.addEvent('click', function(){
this.options.onClick();
}.bind(this));

this.fade = new Fx.Style(this.container, 'opacity').set(0);
this.position();

window.addEvent('resize', this.position.bind(this));
},

position: function(){
if(this.options.container == document.body){
var h = window.getScrollHeight()+'px';
this.container.setStyles({top: '0px', height: h});
}else{
var myCoords = this.options.container.getCoordinates();
this.container.setStyles({
top: myCoords.top+'px',
height: myCoords.height+'px',
left: myCoords.left+'px',
width: myCoords.width+'px'
});
}
},

show: function(){
this.fade.start(0,this.options.opacity);
},

hide: function(){
this.fade.start(this.options.opacity,0);
}

});
Overlay.implement(new Options);

/*************************************************************/

всё само за себя говорит...

Link to comment
Share on other sites

  • 0
хоспади, как же ш тяжело было её найти.... но! нашел:

http://www.phatfusion.net/multibox/

Не могу понять, кто из нас тупой ты или я… Говоришь что Самуэль пишет страницы, на которых используется носколько элементов с одним id и в доказательство показываешь свой код. Я закономерно прошу показать мне именно его страницу с такими элементами, ты мне даешь ссылку и я там этих элементов (с одинаковыми id) не нахожу. Пора тебя увольнять…

- homm пошел набивать стрелу, и не вернулся.

Это вообще о чём? Какую стрелу? Куда не вернулся?

Link to comment
Share on other sites

  • 0

homm, может тебя уволить нужно, потому что читать разучился?!

ты писал:

Сылку, пожалуйста на страницу, где можно скачать «overlay.js»

я тебе дал ссылку на страницу где можно скачать «overlay.js». (внизу)

и я не говорил, что "...Самуэль пишет страницы, на которых используется носколько элементов с одним id...".

—————еще раз——————- (это для плохо видящих)

ты писал:

Этот самуэль пишет такие скрипты, или страницы с несколькими элементами с одинаковыми id ?

я тебе ответил:

выходит, что так mellow.gif

вот принт-скрин дебагера:

и код скрипта overlay.js в котором видны след. строки:

		this.container = new Element('div').setProperty('id', 'OverlayContainer').setStyles({
position: 'absolute',
left: '0px',
top: '0px',
width: '100%',
zIndex: this.options.zIndex
}).injectInside(this.options.container);

которые рождают этот div с id="OverlayContainer"

и из дебагерра видна закономерность - сколько картинок - столько div'ов (с одинаковым id)

————————-

p.s.: Слово "уволить" наверно понравилось... Вообще Это НИКАКОГО отношения к теме не имеет.

Я тему вообще создавал с целью услышать советы от профессионалов как они решают столь повседневные задачи...

Edited by maza
Link to comment
Share on other sites

  • 0

Не важно, кто как пишет. Включайте логику. У id и style разное назначение. По спецификации id - уникальный идентификатор объекта. Не может быть несколько объектов с одним идентификатором. В яваскрипте можно будет обратиться только к первому найденному на странице объекту по id. Если есть дальше еще объекты с таким же id, то до них уже будет не добраться.

А style по спецификации, обозначает стиль объекта а не идентифицирует его.

Link to comment
Share on other sites

  • 0
В яваскрипте можно будет обратиться только к первому найденному на странице объекту по id.

да, точно. совершенно. так и есть.

Если есть дальше еще объекты с таким же id, то до них уже будет не добраться.

если правильно понял значение "добраться".. : я добираюсь. таким образом:

   if(document.getElementById('OverlayContainer')) {
var BodyHeight = document.body.offsetHeight+'px';
var DivOverlays = document.getElementsByTagName('div');
for (var i = 0; i < DivOverlays.length; i++) {
if(DivOverlays[i].id == 'OverlayContainer') {
DivOverlays[i].style.height=BodyHeight;
}
}
}

в каждом диве с одинаковым id меняю высоту...

Link to comment
Share on other sites

  • 0
если правильно понял значение "добраться".. : я добираюсь. таким образом:

   if(document.getElementById('OverlayContainer')) {
var BodyHeight = document.body.offsetHeight+'px';
var DivOverlays = document.getElementsByTagName('div');
for (var i = 0; i < DivOverlays.length; i++) {
if(DivOverlays[i].id == 'OverlayContainer') {
DivOverlays[i].style.height=BodyHeight;
}
}
}

в каждом диве с одинаковым id меняю высоту...

А ты в курсе, с какой соростью это работает???

Link to comment
Share on other sites

  • 0

А зачем так сложно, если проще разные id поставить. Хотя, если меняешь style, так и искать надо по style, а не по id. id тут вообще не нужен.

В любом случае, несколько одинаковых id - ошибка.

Link to comment
Share on other sites

  • 0
и из дебагерра видна закономерность - сколько картинок - столько div'ов (с одинаковым id)

————————-

Из дебага страницы самого самуэля видно — скоклько бы не было картинок, элемент с id 'OverlayContainer' всегда один. Т.е. скрипт, написанный самуэлем не предлагает нарушения правил разметики (с одним id один элемент). Нарушение этого правила происходит на твоей странице в следствии твоей ошибки. Следовательно, ищя возможность выбрать элементы с одинаковыми id ты решаешь ненужную задачу, т.е. тебе следует сперва высняить, почему у тебя их так несколько. Ну или уволиться…

Я тему вообще создавал с целью услышать советы от профессионалов как они решают столь повседневные задачи...

Профессионалы не решают такие задачи. Разве ты это не выяснил из моего первого сообщения в этой теме?

А зачем так сложно, если проще разные id поставить. Хотя, если меняешь style, так и искать надо по style, а не по id. id тут вообще не нужен.

В любом случае, несколько одинаковых id - ошибка.

Не путай неокрепший разум. Здесь class как раз не нужен, потому что элемент с таким id должен быть один на странице.

Link to comment
Share on other sites

  • 0
Не путай неокрепший разум. Здесь class как раз не нужен, потому что элемент с таким id должен быть один на странице.

Да, конечно. Я, собственно, об этом и говорю, просто хотел немного шире пояснить суть проблемы. :)

Link to comment
Share on other sites

  • 0
А ты в курсе, с какой соростью это работает???

нет, не вкурсе)) потому и советы хотел бы услышать...

Профессионалы не решают такие задачи. Разве ты это не выяснил из моего первого сообщения в этой теме?

ты наверно просто издеваешься... или специально не замечаешь буков...

Я имел ввиду (перефразирую):

Интересовало, какими методами, эксперты в области JavaScript (эксперты - люди, которые имеют опыт), находят и узнают колличество тегов на странице с известными, допустим, атрибутами и также как узнают есть ли объект на странице, зная определенный атрибут.

Из дебага страницы самого самуэля видно — скоклько бы не было картинок, элемент с id 'OverlayContainer' всегда один. Т.е. скрипт, написанный самуэлем не предлагает нарушения правил разметики (с одним id один элемент). Нарушение этого правила происходит на твоей странице в следствии твоей ошибки. Следовательно, ищя возможность выбрать элементы с одинаковыми id ты решаешь ненужную задачу, т.е. тебе следует сперва высняить, почему у тебя их так несколько. Ну или уволиться…

Понял, спасибо, буду выяснять как так у меня получилось...

p.s.: homm, если тебя много раз увольняли и у тебя, в связи с этим, сложился какой-то комплекс, то не нужно пытаться прививать его другим или просто выливать свой негатив на других.

Edited by maza
Link to comment
Share on other sites

  • 0
Я имел ввиду (перефразирую):

Интересовало, какими методами, эксперты в области JavaScript (эксперты - люди, которые имеют опыт), находят и узнают колличество тегов на странице с известными, допустим, атрибутами и также как узнают есть ли объект на странице, зная определенный атрибут.

Эксперты всегда контролируют, ЧТО в данный момент присутствует на их странице. И никогда не делают два одинаковых id.

Link to comment
Share on other sites

  • 0

Zont, этот вопрос уже обсосанный, имхо. Я прекрасно понимаю и не отрицал ни разу этого. На то он и идентификатор потому что уникальный.

Расскажи, плз, на счет скорости выполнения и какие есть альтернативы? например имя класса могут повторятся. как узнавать лучше колличество объектов с классом "xxx" , к примеру?

Link to comment
Share on other sites

  • 0
Zont, этот вопрос уже обсосанный, имхо. Я прекрасно понимаю и не отрицал ни разу этого. На то он и идентификатор потому что уникальный.

Расскажи, плз, на счет скорости выполнения и какие есть альтернативы? например имя класса могут повторятся. как узнавать лучше колличество объектов с классом "xxx" , к примеру?

Так и узнавать, если с классом работаешь. Просто надо проектировать систему так, чтобы не искать по страничке эти элементы...

Link to comment
Share on other sites

  • 0
Расскажи, плз, на счет скорости выполнения и какие есть альтернативы? например имя класса могут повторятся. как узнавать лучше колличество объектов с классом "xxx" , к примеру?

Правило номер 1:

Ограничивай объем перебираемых элементов. Всегда делай базу — общий родитель, которому можно дать идентификатор, который и получать одной функцией.

Правило номер 2:

Для поиска выбирай конкретный теги, а потом ищи среди них походящие.

Правило номер 3:

Не изобретай велосипед. Возьми фреймворк. Я пользуюсь jQuery. В нем запись оптимальной выборки будет выглядеть так:

$('#base element.class') или так, если тебе нужен не класс: $('#base element[attrib=value]')

отредактировал Иван Шумов

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy