<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; HTA: GetElementsById]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8331</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8331&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «HTA: GetElementsById».]]></description>
		<lastBuildDate>Sun, 29 Sep 2013 06:00:18 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75617#p75617</link>
			<description><![CDATA[<p>Не согласен я с автором.<br />Я тоже минималист в коде, но идти на поводу у криворуких мелкомягких плюющих на все стандарты, это как то неправильно.</p><p>Хочется минимизировать, так используйте ссылки на нужные элементы.<br />Делается один раз по онлоаду, дайте любые говорящие имена своим элементам.<br /></p><div class="codebox"><pre><code>var chekOne=document.getElementById(&quot;chek1&quot;);
chekOneSt=chekOne.style;
</code></pre></div><p>и так далее.</p><p>Еще Леонид Ильич сказал, <strong>экономика должна быть экономной</strong>.<br />Наверно поэтому в его правление товары ну очень экономно в магазинах появлялись. Наверно.</p>]]></description>
			<author><![CDATA[null@example.com (Любитель)]]></author>
			<pubDate>Sun, 29 Sep 2013 06:00:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75617#p75617</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72574#p72574</link>
			<description><![CDATA[<p>Не могу не согласиться. Хорошо парировали : )</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 30 May 2013 16:00:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72574#p72574</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72573#p72573</link>
			<description><![CDATA[<p>2<strong>Rumata</strong><br />Полностью соглашусь.<br />В походе мне с лихвой хватает широкой кружки и ложки на веревочке. Супер удобно и ничего лишнего <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Thu, 30 May 2013 15:57:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72573#p72573</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72572#p72572</link>
			<description><![CDATA[<p>Можно сахар помешивать чайной ложкой, а котлету нанизывать на вилку, а суп хлебать из глубокой тарелки да столовой ложкой. Все это будет соответствовать этикету, но сколько лишних приборов - ведь можно сделать все одной столовой ложкой. Проще и удобнее - и посуды мыть меньше!</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 30 May 2013 15:54:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72572#p72572</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72571#p72571</link>
			<description><![CDATA[<p>2<strong>DnsIs</strong><br />Конечно можно любому элементу присвоить <strong>class</strong> (для задания стиля), еще присвоить <strong>name</strong> (чтобы находить его с помощью getElementsByName), еще присвоить уникальный <strong>id</strong> (чтобы находить его с помощью getElementById).<br />Все это будет соответствовать стандартам, но сколько лишнего кода!<br />Я же говорил о том, как можно писать <strong>короче</strong> и <strong>удобнее</strong>.<br />Да, это не всегда соответствует стандартам и, порой, работает только в IE. Но <span class="bbu">работает</span>!</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Thu, 30 May 2013 15:45:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72571#p72571</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72569#p72569</link>
			<description><![CDATA[<div class="quotebox"><cite>mozers пишет:</cite><blockquote><p>... но и одним махом поменять их стиль задав в CSS #MyID {}.</p></blockquote></div><p>Может правильней будет использовать class и в CSS писать &quot;.MyID {}&quot;?</p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Thu, 30 May 2013 13:26:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72569#p72569</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72461#p72461</link>
			<description><![CDATA[<p>Плохая практика мешать в се в одну кучу. Надо стараться чтобы &quot;котлеты - отдельно, мухи - отдельно&quot;. Это я вот к чему: </p><p>-- для доступа к множеству одноименных элементов использовать атрибут name и метод getElementsByName<br />-- для доступа к одному конкретному элементу использовать атрибут id и метод getElementById</p><p>При этом я не отвергаю Ваш способ адресации - всего лишь дополняю его некоторой систематичностью. Пользователям Ваших работ все равно, что и как работает, а вот желающие заглянуть &quot;под капот&quot; могут удивиться нетрадиционному использованию известных механизмов. Согласен, что в таких случаях должен быть подробный комментарий, описывающий о нестандартном использовании. Но оправданно ли использование &quot;триков&quot; - getElementsByName для доступа по id, вместо name, когда можно добавить атрибут name и следовать стандарту?</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sun, 26 May 2013 15:16:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72461#p72461</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72441#p72441</link>
			<description><![CDATA[<p>Вот, с одной стороны, стандарты - да, нужны. И учить начинающих профессионалов, наверное, надо по стандартам; а с другой - и трикс никто не отменял. Не то, чтобы мне понравилось использовать один id для разных элементов, но и сам как-то использовал, так было удобнее. А если взглянуть на батнички в коллекции, так там чуть ли не все с теми или иными трюками (иногда - с очень забавными). Пожалуй, за использование подобных решений ответственен разработчик: если всё работает, какие могут быть претензии? А при публикации надо прсто предупреждать читателей, что в данном случае и было сделано.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sat, 25 May 2013 19:43:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72441#p72441</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72417#p72417</link>
			<description><![CDATA[<p>2<strong>Rumata</strong><br /></p><div class="quotebox"><blockquote><p>Возможно это Вам удобно, тогда почему же Вы спрашиваете совета?</p></blockquote></div><p>Да потому что меня всегда удивляло, что такую великолепную возможность так редко используют. Даже сами мелкософтовцы сплошь и рядом пишут <strong>document.getElementById(&#039;myID&#039;).value</strong> когда можно написать просто <strong>myID.value</strong>.<br />Вы мне все очень подробно и аргументировано разъяснили. Спасибо!</p><p>Кстати, о возможности получить массив <strong>id</strong> c помощью <strong>document.getElementByName</strong> я узнал только вчера, совершенно случайно, сочиняя пример для этой темы. Теперь буду пользоваться <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Таким образом, для сочинения своих HTA-шек буду пользовать:<br />- для определения есть ли вообще элемент с указанным id:<br /></p><div class="codebox"><pre><code>if (document.getElementById(&#039;idElement&#039;))</code></pre></div><p>- для подключения к единственному элементу:<br /></p><div class="codebox"><pre><code>idElement.value = &#039;sample&#039;;</code></pre></div><p>- для подключения к одному элементу массива id (если кол-во элементов всегда больше 1) :<br /></p><div class="codebox"><pre><code>idElement[i].value = &#039;sample&#039;;</code></pre></div><p>- для подключения к одному элементу массива id (если кол-во элементов неизвестно) :<br /></p><div class="codebox"><pre><code>document.getElementByName(&#039;idElement&#039;)[i].value = &#039;sample&#039;;</code></pre></div><p>Другие конструкции считаю неоправданно громоздкими.<br />Повторюсь, что тем, кто пишет не только на HTA, такие советы только повредят.</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Sat, 25 May 2013 14:00:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72417#p72417</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72413#p72413</link>
			<description><![CDATA[<p>Возможно это Вам удобно, тогда почему же Вы спрашиваете совета? Делайте как Вы считаете это удобным, не взирая на стандарты. МСИЕ тоже на них не смотрит и расширяет стандартные решения в свою угоду. В результате путаетесь Вы. </p><p>HTMLElement.id<br /></p><div class="quotebox"><blockquote><p><a href="http://www.w3.org/TR/1999/REC-html401-19991224/struct/global.html#adef-id">http://www.w3.org/TR/1999/REC-html401-1 … ml#adef-id</a><br />id = name [CS]<br />&nbsp; &nbsp; This attribute assigns a name to an element. This name must be unique in a document.</p></blockquote></div><p>document.getElementById<br /></p><div class="quotebox"><blockquote><p><a href="http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-getElBId">http://www.w3.org/TR/DOM-Level-2-Core/c … D-getElBId</a><br />getElementById introduced in DOM Level 2<br />&nbsp; &nbsp; Returns the Element whose ID is given by elementId. If no such element exists, returns null. Behavior is not defined if more than one element has this ID.</p></blockquote></div><p>Обратите внимание: везде говорится в единственном числе. ID нужен для уникальности элемента, чтобы однозначно идентифицировать один элемент. То что МСИЕ позволяет получать список элементов по атрибуту name с помощью метода getElmentById не говорит о том, что это хорошо. Для этого Вы можете с тем же успехом использовать getElementsByName:</p><div class="quotebox"><blockquote><p><a href="http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-71555259">http://www.w3.org/TR/DOM-Level-2-HTML/h … D-71555259</a><br />getElementsByName<br />&nbsp; &nbsp; With [HTML 4.01] documents, this method returns the (possibly empty) collection of elements whose name value is given by elementName. In [XHTML 1.0] documents, this methods only return the (possibly empty) collection of form controls with matching name. This method is case sensitive.</p></blockquote></div><p>Это будет лучше (близко стандарту), понятнее (другие программисты скажут спасибо) и логичнее (поиск одного по id - getElementById, поиск кучи по name - getElementsByName):<br /></p><div class="codebox"><pre><code>
&lt;div name=&quot;cite&quot; id=&quot;poem&quot;&gt;&lt;/div&gt;
&lt;div name=&quot;cite&quot; id=&quot;author&quot;&gt;&lt;/div&gt;
...

var cites = document.getElementsByName(&#039;cite&#039;);
alert(cites.length);

document.getElementById(&#039;poem&#039;).innerHTML = &#039;To be or not to be&#039;;
document.getElementById(&#039;author&#039;).innerHTML = &#039;William Shakespeare&#039;;
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 25 May 2013 09:06:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72413#p72413</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72412#p72412</link>
			<description><![CDATA[<p>Добавлю еще об одной уникальной возможности, которую мы получаем, присваивая элементам ID.<br />Мы можем находить их с помощью функции getElementsBy<strong>Name</strong> !<br /></p><div class="codebox"><pre><code>&lt;html&gt;
&lt;head&gt;
&lt;style type=&quot;text/css&quot;&gt;
    #idInput {font-weight:bold; color:blue;};
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    function GetValuesById(){ // так - проще, но это работает верно, только если элементов с idInput больше одного.
        for (var i = 0; i &lt; idInput.length; i++) {
            alert (&quot;Param&quot; + i + &quot; = &quot; + idInput[i].value);
        }
    }
    function GetValuesByName(){
        var arrInputs = document.getElementsByName(&#039;idInput&#039;);
        for (var i = 0; i &lt; arrInputs.length; i++) {
            alert (&quot;Param&quot; + i + &quot; = &quot; + arrInputs[i].value);
        }
    }
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;table border=&quot;1&quot;&gt;
        &lt;tr&gt;
            &lt;td&gt;Param0:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;Mary&quot; id=&quot;idInput&quot;&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Param1:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;Vanessa&quot; id=&quot;idInput&quot;&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Param2:&lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;Lara&quot; id=&quot;idInput&quot;&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td colspan=&quot;2&quot;&gt;&lt;input type=&quot;button&quot; value=&quot;Get Values&quot; onclick=&quot;GetValuesByName()&quot;&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre></div><p>При использовании getElementsByName нужда в моей функции GetElementsById, приведенной в первом посте, отпадает.</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Sat, 25 May 2013 07:59:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72412#p72412</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72411#p72411</link>
			<description><![CDATA[<p>2<strong>Rumata</strong><br /></p><div class="quotebox"><blockquote><p>возможно Вы путаете с методом getElementsByClassName</p></blockquote></div><p>Нет не путаю. getElementsByClassName как и getElement<strong><span style="color: red">s</span></strong>ById в IE не существует. Тормознутые эмуляции не рассматриваем.<br /></p><div class="quotebox"><blockquote><p>Это не правильно, если на странице несколько элементов с одинаковыми ID</p></blockquote></div><p>Позвольте не согласится. В чем &quot;неправильность&quot;? Это - супер-удобно, т.к. позволяет всегда и очень просто идентифицировать элемент не создавая никаких функций поиска. Для сравнения, по <strong>name</strong> элемент так запросто не найдешь. А тут, присвоив элементам <span class="bbu">только ID</span> мы можем не только всегда однозначно и просто обратиться к любому из них, но и одним махом поменять их стиль задав в CSS #MyID {}.<br />И Вы предлагаете мне добровольно отказаться от этой красоты и удобства, только потому что кто то однажды написал что это &quot;неправильно&quot;???<br /></p><div class="quotebox"><blockquote><p>Однажды может случиться, что будет создана переменная, одноименная тэгу</p></blockquote></div><p>Ну, извините, как говорится - &quot;смотреть надо&quot;. Да мало ли ошибок может возникнуть по человеческой невнимательности???<br />Я, например, чтобы избежать такой ошибки, имена для всех ID-шников всегда начинаю с букв &quot;id&quot;.</p><p>P.S. Возможно для тех кто пишет кросс-браузеный код привыкать к такому удобству и не стоит. Привыкнешь, а потом будешь страдать что в других браузерах так просто это не получается. Для тех, кто как я, сочиняет только HTA-шки, метод - просто супер.</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Sat, 25 May 2013 06:22:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72411#p72411</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72409#p72409</link>
			<description><![CDATA[<p>Много текста - я не понял о чем речь. Могу только сказать следующее.</p><p>Первое. getElementById - это стандартный метод всех браузеров и эмулировать его собственными силами не надо (возможно Вы путаете с методом getElementsByClassName - она до недавнего времени не существовала вообще, и именно ее приходилось реализовывать). </p><p>Второе. Атрибут id элемента предназначен для однозначной идентификации конкретного элемента: вот этот элемент, или вот тот. Это не правильно, если на странице несколько элементов с одинаковыми ID. </p><p>Третье. Пример, который показывает, почему стоит пользоваться getElementById. <br /></p><div class="codebox"><pre><code>
&lt;html&gt;

&lt;body&gt;
&lt;div id=&quot;uniq&quot;&gt;hello, world&lt;/div&gt;
&lt;script&gt;

var uniq = {
    innerHTML: &#039;BUE!!!&#039;
};

alert([
    uniq.innerHTML, 
    document.getElementById(&#039;uniq&#039;).innerHTML
]);

&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre></div><p>Здесь не надо смотреть на искусственность примера и его простоту. Маленькие проекты очень быстро вырастают в большие. Однажды может случиться, что будет создана переменная, одноименная тэгу, и Вы неожиданно осчастливите себя, отлаживая казалось бы правильный код.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 24 May 2013 18:59:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72409#p72409</guid>
		</item>
		<item>
			<title><![CDATA[HTA: GetElementsById]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=72408#p72408</link>
			<description><![CDATA[<p>Сразу хочу договорится: Ни о какой кросс-браузерности речи не идет. Мы работаем с HTA, а значит речь только о Internet Explorer.<br />Итак, в IE очень удобно обращаться к элементу по его ID.<br />Для этого даже getElementById использовать не нужно. Тем более что document.getElementById(&#039;myId&#039;) вернет только первый элемент с указанным ID.<br />Функции getElement<strong>s</strong>ById просто не существует. Да она и не нужна. В IE можно обратиться к нужному элементу с известным ID просто указав его индекс, например:</p><div class="codebox"><pre><code>myId[6].style.color = &#039;red&#039;;</code></pre></div><p>И все хорошо, пока элементов с заданным ID больше одного. Если же элемент myId - единственный, то к нему уже нельзя обратиться как к массиву и приходится использовать</p><div class="codebox"><pre><code>myId.style.color = &#039;red&#039;;</code></pre></div><p>Вставлять во все участки кода проверку на количество элементов с заданным ID мне показалось неудобным. Сочинил такую простенькую функцию:</p><div class="codebox"><pre><code>
function GetElementsById(id){
    return (id[0]) ? id : [id];
}</code></pre></div><p>Теперь можно писать так:</p><div class="codebox"><pre><code>
GetElementsById(myId)[n].style.color = &#039;red&#039;;</code></pre></div><p>Код будет работоспособен как при нескольких элементах с указанным ID так и при единственном.</p><p>JS я люблю, но спецом в нем себя не считаю. Поэтому решил посоветоваться прежде чем вставлять это решение во все мои HTA проги.<br />Попутно хотел задать вопрос:<br />Я никогда не использую document.getElementById(&#039;myId&#039;), но иногда (очень-очень редко) обращение напрямую к элементу по его ID почему то не срабатывает, тогда приходится применять getElementById.<br />Есть какие нибудь правила когда <span class="bbu">обязательно</span> надо использовать getElementById или это просто глюки IE?</p><p>P.S. Можно, конечно, использовать самописную кросс-браузерную фукцию getElement<strong>s</strong>ById (в инете ее многие приводят). Но перебирать все элементы подряд, а потом сверять их ID с заданным мне кажется уж чересчур ресурсоемким.</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Fri, 24 May 2013 18:28:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=72408#p72408</guid>
		</item>
	</channel>
</rss>
