DarkSet
|
|
1 | |
Вывод информации через скрипт16.11.2006, 15:54. Показов 8493. Ответов 24
Метки нет (Все метки)
Возникла у меня тут пара вопросов относительно вывода информации через скрипт.
Первое - я никак не могу понять как обратится к объекту не через ID а через name, как на него ссылаться? Вроде читал читал, то работает, то нет, не понимаю. Второе - как вывести информацию между определенными тегами? То есть если есть у тега свойство value то все понятно, присваиваем ему значение - видим результат. Но к примеру если у меня есть <div></div> или <textarea></textarea> как мне работать с тем что между ними? И третье - как сделать вывод через ява скрипт новых строк не убив старые? Когда я использую dicument.write вся страница убивается, в том числе и скрипты, и остается только то что было выведено этими функциями. А если мне надо добавить строки не удалив то что есть? Вот, заранее спасибо. Не отсылайте к мануалке, я ее прочитал, но не понял |
16.11.2006, 15:54 | |
Ответы с готовыми решениями:
24
Вывод информации из БД через форму Вывод информации из бд через ссылку Вывод информации из БД через форму Вывод информации на TFT через SPI |
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269
|
||||||||||||||||
16.11.2006, 20:32 | 2 | |||||||||||||||
Через name в основном обращаются к формам, таблица, фреймам и т.п.
Например:
Или используй:
0
|
DarkSet
|
|
16.11.2006, 20:41 | 3 |
Спасибо!
Но с именами я не совсем понял - я не могу обратиться к любому тегу по имени? Если есть тег, к примеру <div id='MyDiv' name='MyDiv2'> я могу обратиться к нему MyDiv.<метод>, смогу я к нему обратиться через document.MyDiv2.<метод>? Или как? |
DarkSet
|
|
16.11.2006, 21:07 | 4 |
И такой еще вопрос, имена мне не помогли.. Как можно обратиться к группе объектов? Вот у меня есть текст, с некоторыми его частями надо сразу после заргузки страницы выполнить определенное действие, причем заранее количество этих частей незвесно - оно генерится ПХП. В идеале поставить на каждую часть скнипт, но на какое событие? Какой объединяющий тег поддерживает событие onload? <span> - самый лучший, не вносит изменений в отображение, но у него события такого нет... Имена и ИД должны быть уникальными, так что мне приходитя в ПХП генерить джава скрипт который содержит все все айдишники того что мне надо поменять, и меняет. Но это же как то неправильно... Может можно обратиться к группе объектов через класс, или еще как? Или есть событие поддерживаемое всеми тегами которое не надо вызывать а оно само происходит, но не onload?
|
5 / 5 / 5
Регистрация: 24.10.2011
Сообщений: 269
|
|
16.11.2006, 22:59 | 5 |
DarkSet
Если честно, то я незнаю, что именно ты хочешь сделать, но я знаю ответы на эти вопросы =) Все же тебе придёться посмотреть документацию http://msdn2.microsoft.com/en-us/library/ms536437.aspx http://msdn2.microsoft.com/en-us/library/ms536437.aspx -- <STRONG>getElementById</STRONG> После сразу же в списке идёт <STRONG>getElementByName</STRONG> и <STRONG>getElementByTagName</STRONG> они все идут с примерами и если, что-то будет непонятно, то спрашивай =)
0
|
DarkSet
|
|
17.11.2006, 14:10 | 6 |
хм, функции интересные, а что значит коллекция елементов? Как мне потом обращаться к каждому отдельно? Я пробую
var i=0; for (i=0; i<length(document.getElementsByName("touncode")); i++) { document.getElementsByName("touncode")[i].innerText=UnCode(document.getElementsByName("touncode")[i].innerText); } не работает. Пробовал просто document.getElementsByName("touncode").innerText=UnCode(document.getElementsByNa me("touncode").innerText); тоже не работает. Как мне обратиться к каждому из елементов отдельно два раза к одному и тому же? |
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
17.11.2006, 17:26 | 7 |
Так с коллекциями никто не работает - это очень неэффективно. Всегда сохраняй результат работы document.getElementsByName в переменную и работай с ней:
Код
var codes = document.getElementsByName("touncode"); for (var i=0; i<codes.length; i++) { codes[i] ... }
0
|
DarkSet
|
|
17.11.2006, 18:14 | 8 |
var codes=document.getElementsByName("touncode");
for (var i=0; i<codes.length; i++) { window.alert("asdf"); codes[i].innerText=UnCode(codes[i].innerText); } алерт не показывается, в цикл не входит стало быть. Хотя елементы с таким именем точно есть, я через ИЕ открыл хтмл код и проверил поиском. регистр букв одинаковый - везде нижний. почему такой глюк? поставил алерт на window.alert(codes.length); до цикла - показывает 0. Функция находится в <head> а елементы в <body>, может из-за этого? Функция просто не видит елементов? |
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
17.11.2006, 18:32 | 9 |
1. Зачем слеши в строках?
2. У каких тегов ты name поставил?
0
|
DarkSet
|
||||||
17.11.2006, 18:46 | 10 | |||||
Слеши потому что копировал из исходника ПХП
теги - <span> один <p> много например <p name='touncode'>1082.1083.1072.1076.1073.1080.1097.1077.</p> 0 типисный представитель, сгенерен циклом в ПХП и <span name='touncode' onclick='this.innerText=UnCode(this.innerText)'>71.108.97.118.97.</span> - при клике успешно перекодируется. Но мне ж надо чтобы при окончании загрузки все это делалось. вот скрипт на загрузке:
|
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
17.11.2006, 19:03 | 11 |
У тегов <p> и <span> нет атрибута name. Vizlim уже сказал тебе, что он применятся для элементов формы и для фреймов.
В твоем случае я бы присвоил <span>-у id и работал с ним через document.getElementById, а для <p> присвоил бы атрибут class="touncode". Затем получал бы все элементы P с помощью document.getElementsByTagName("P") и обрабатывал как нужно все элементы у которых свойство className == "touncode".
0
|
DarkSet
|
|
17.11.2006, 19:19 | 12 |
хм, интересная идея, спасибо, как то я сам до такого не додумался )
Не думал что атрибут name есть не у всех тегов. Заменил имя на id - все заработало. http://msdn2.microsoft.com/en-us/library/ms536438.aspx http://msdn2.microsoft.com/en-us/library/ms536438.aspx там не написано что это только для форм, собственно не только для форм оно и работает. Но ищет и по имени и по ид-шникам. Глюк был в том что эти теги не поддерживают имя по человечески. Спасибо |
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
17.11.2006, 19:28 | 13 |
Учти только что id должен быть уникальным в пределах документа. Это требование рекомендации w3c.
Насчет поддержки атрибутов читай http://www.w3.org/TR/html4/ рекомендацию html 4 или справку по http://msdn2.microsoft.com/en-us/library/ms533054.aspx отдельным тегам в msdn.
0
|
0 / 0 / 1
Регистрация: 22.11.2006
Сообщений: 5
|
|
22.11.2006, 01:48 | 14 |
bazile: так с коллекциями тоже никто не работает - всегда сохраняй длину коллекции в переменной ибо это дает преимущество в несколько десятков-сотен и даже тысяч раз в скорости выполнения.
Свойство innerText почти нигде кроме IE не поддерживается - пользуйтесь исключительно innerHTML а если в тэге нет ничего кроме текста - обращайтесь к DOM: допустим текущий элемент - <span> c текстом, тогда для него свойство firstChild как раз и будет предсталять текст(!объект!). Вообще обращаться к элементам с заданным id напрямую (типа My_div.innerHTML=... для "<div id='My_div'") - не есть хорошо. IE и Опера на это смотрят нормально, FireFox ругается предупрежлением, Netscape вообще ошибку выдает. Для обращения к элементам по id или name лучше завести пару простеньких функций типа Код
function gel(_id){return window.document.getElementById?window.document.getElementById(_id):null }
0
|
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
22.11.2006, 13:48 | 15 |
2 ISM
Сохранение кол-ва элементов в коллекции в отдельную переменную ускорит выполнение кода, но не в тысячу раз, это ты загнул. Выделение document.getElementById() в отдельную функцию может иметь смысл только если скрипт очень большой и в нем много вызовов getElementById. Это может ускорить работу синтактического анализатора кода, но, одновременно, это замедляет выполнение кода. Поэтому эффект от такой оптимизации мне кажется сомнительным.
0
|
DarkSet
|
|
22.11.2006, 15:43 | 16 |
А если записать цикл как
for (var i=codes.length-1; i>=0; i--) { } это заменит сохранение длины колекции в отдельную переменную? По идее присваивание выполняется один раз - на первой итерации. Или всетаки это не то и лучше присваивать отдельно перед циклом? |
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
22.11.2006, 15:49 | 17 |
В такой записи присвоение будет выполнено один раз. Но порядок обхода элементов коллекции изменится на обратный. Если тебя это устраивает, то нет проблем.
0
|
DarkSet
|
|
22.11.2006, 16:27 | 18 |
да, порядок тут не важен, ускорение будет? это хорошо.
Еще на счет firstChild, использую: codes[i].firstChild=UnCode(codes[i].firstChild); Не работает! Пишет что свойство не поддерживается. Пробовал codes[i].firstChild.toString=UnCode(codes[i].firstChild.toString); тоже самое. Если мне возвращается текст в виде объекта так как мне с ним работать? к тому же немного насторожила в мсдн запись:</P><P class=clsRef>Syntax</P><BLOCKQUOTE><TABLE class=clsStd><TBODY><TR><TH><B>HTML</B></TH><TD>N/A</TD></TR><TR><TH><B>Scripting</B></TH><TD>[ <SPAN class=clsRange>oElement</SPAN><B> =</B> ] <I><SPAN class=moreinfo title="an element from the Applies To list below object</SPAN></I>.<B>firstChild</B></TD></TR></TBODY></TABLE></BLOCKQUOTE><P class=clsRef>Possible Values</P><BLOCKQUOTE><TABLE class=clsStd><TBODY><TR><TD><SPAN class=clsRange>oElement</SPAN></TD><TD>Object that receives the first child object.</TD></TR></TBODY></TABLE> The property is read-only. The property has no default value. Если оно только для чтения то как мне поможет? Мне же надо не только читать но и изменять.</P></BLOCKQUOTE> |
85 / 61 / 69
Регистрация: 15.03.2007
Сообщений: 6,906
|
|
22.11.2006, 16:50 | 19 |
firstChild хранит элемент (узел) документа. Напрямую его менять нельзя, поэтому он доступен только для чтения. Это можно сказать "обертка" вокруг настоящего содержимого элемента. Чтобы изменить текст узла попробуй такой код:
codes[i].firstChild.nodeValue = UnCode(codes[i].firstChild.nodeValue); Для понимания DOM очень полезно иметь под рукой вспомогательные инструменты. В браузере FireFox для этого есть DOM Inspector, а для MSIE панель инструментов под названием http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&DisplayLang=en Developer Toolbar.
0
|
DarkSet
|
|
22.11.2006, 17:04 | 20 |
Да, так заработало, спасибо.
Тулбар интересный, много возможностей дает. Есть к нему документация на русском? Или русский это для слабохарактерных? |
22.11.2006, 17:04 | |
22.11.2006, 17:04 | |
Помогаю со студенческими работами здесь
20
Вывод информации из БД через сайт в Excel Вывод информации через знаки препинания как реализовать вывод информации из бд через php? Вывод информации о записи в Label через LookupComboBox Ввод-вывод информации через UART AVR Вывод времени через скрипт Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |