Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получение данных из тега в массиве, как? (https://javascript.ru/forum/misc/10440-poluchenie-dannykh-iz-tega-v-massive-kak.html)

Madd 05.07.2010 12:15

Получение данных из тега в массиве, как?
 
Добрый день.

Есть HTML-Страничка, а внутри скрипт, в нем массив, допустим:
var HM = new Array();
HM[1] = "<name>Имя</name>";
HM[2] = "<name>Имя2</name>";


Вопрос: Как достучаться до "Имя" и "Имя2"?

Пробовал примерно так:
HM[1].getElementsByTagName('name')[0].childNodes[0].nodeValue;
HM[2].getElementsByTagName('name')[0].childNodes[0].nodeValue;

Но, нет, не вышло.

Подскажите, пожалуйста! А то нужно хранить динамечески подгружаемую информацию, а ее много, мне кажется удобнее всего ее хранить именно в массивах-тегах.

Спасибо.

Skipp 05.07.2010 12:17

replace();

innerHTML

Madd 05.07.2010 17:18

Вы не могли бы показать на моем примере, как это использовать? А то я не совсем понял, спасибо.

exec 05.07.2010 17:35

var HM = new Array(); 
HM[1] = "<name>Имя</name>"; 
HM[2] = "<name>Имя2</name>";

alert( HM[1].match(/>(.+?)</)[1] );

Madd 05.07.2010 18:03

3 проблемы с этим кодом:
1) В IE вообще не работает.
2) Почему-то можно запустить только 1 раз, после обновления еще 1 раз и так до бесконечности, а мне нужно неограниченно раз без обновления страницы.
3) если дописать еще информации, вроде этого:
HM[1] = "<name>Имя</name><fam>Фамилия</fam><age>27</age>";

то не совсем понятно, как обратиться к следующим тегам.

Надеюсь на помощь, спасибо.

exec 05.07.2010 18:47

var HM = new Array(); 
HM[1] = "<name>Имя</name>";

var x = document.createElement('div');
x.innerHTML = HM[1];
alert( x.getElementsByTagName('name')[0].innerHTML );

Madd 05.07.2010 19:00

Сделал так, но в IE все равно не работает и по onmouseover вызывается лишь 1 раз, а вот проблему с тегами, та что номер 3 решили :)
function test(id) {
	if (id < 1) return;
	var x = document.createElement('div');
	x.innerHTML = HM[id];
	document.getElementById('shher').innerHTML = x.getElementsByTagName('name')[0].innerHTML;
	}

B~Vladi 05.07.2010 22:01

Madd, что за бред ты вообще пишешь?
HTML нужно хранить не в массивах, а в HTML-виде.

Madd 05.07.2010 22:04

HTML, CSS, PHP я знаю хорошо, изучать Яваскрипт у меня, к сожалению, времени нет, мне нужно срочно доделать сайт, именно поэтому я пишу на этот форум, в эту тему, если было бы время, я бы, разумеется, разобрался сам, но сроки сильно жмут.

Так что, все же надеюсь на какой-то готовый примерчик для меня, тем более прошу самое элементарное показать.
Кстати, скрипт не работает в IE, так как я не знаю Явы? Интересно, видимо душа ИЕ открывается только тем, кто познал Яву.. Я просто вставил предложенный мне код в ИЕ и сказал, что он там работать отказывается.

Заранее благодарен.

B~Vladi 05.07.2010 22:10

Во первых, как ты получаешь "динамически загружаемую информацию"? Ajax? Тогда получай её как responseXML и работай как с DOM.

Madd 05.07.2010 22:20

Цитата:

Сообщение от B~Vladi (Сообщение 62319)
Madd, что за бред ты вообще пишешь?
HTML нужно хранить не в массивах, а в HTML-виде.

Будет удобнее в массиве, ибо иформации там примерно на 1000 - 2000 записей.

В том то и дело, что я не знаю как ее получать, вопрос как раз про это.

Короче говоря. На сайте есть, например, 10 картинок, при наводе на каждую текст в диве слева от этих 10 картинок заменяется на данные из 1 из 10 массивов, в каждом из которых есть теги.

ЗЫ Если предложите более удобное хранение информации, буду только рад.

Очень хотелось бы увидеть пример, непосредственно на HTML+javascript от Вас, соотв. моей схеме.

Спасибо.

B~Vladi 05.07.2010 22:40

Цитата:

Сообщение от Madd
Будет удобнее в массиве

Тогда только RegExp. Но, судя по твоему уровню знаний, для тебя не пойдет.
Цитата:

Сообщение от Madd
На сайте есть, например, 10 картинок, при наводе на каждую текст в диве слева от этих 10 картинок заменяется на данные

В таком случае лучше выводить эти данные сразу при загрузке страницы и показывать при наведении на картинку.
Цитата:

Сообщение от Madd
Если предложите более удобное хранение информации, буду только рад.

Если предыдущий вариант не устраивает, советую посмотреть в сторону JSON. Думаться мне, что не нужны тебе теги в данных. В любом случае ты всегда сможешь создать эти теги динамически, зачем пересылать лишние байты?

Цитата:

Сообщение от Madd
Очень хотелось бы увидеть пример, непосредственно на HTML+javascript

Сори, чувак, мне не до этого. Пути решения я предложил - написать должен ты сам. Тут ничего сложного, поверь. Тем более, что всем тут глубоко пох на твои сроки и твои проблемы. Как будто у нас дел нет - сидим на форуме целыми днями. Спасибо за понимание.

Madd 05.07.2010 23:02

А форум зачем в таком случае?
ЗЫ Символически заплатил бы за создание для меня подобного скрипта, но надо понимать, он слишком прост, даже для новичка в Java, которым я и не являюсь :( Поэтому только символически оплачу. (это баксов 10 наверное.)

Если кто поможет - пишите в личку.

Madd 05.07.2010 23:03

Цитата:

В таком случае лучше выводить эти данные сразу при загрузке страницы и показывать при наведении на картинку.
Ну как бы они сразу и выводятся в массиве, только внутри ява-кода, а показываются только при наводе на картинку, Вы код видели вообще?

Madd 05.07.2010 23:05

Скажу больше, скрипт прекрасно работает, но если функцию вызвать второй раз, она не сработает, вопрос был один, ПОЧЕМУ?

Octane 05.07.2010 23:06

Цитата:

Сообщение от Madd
А форум зачем в таком случае?

Для общения JavaScript-программистов, что непонятного то?
http://phpclub.ru/faq/WhyForum

Madd 05.07.2010 23:14

var x = document.createElement('div');
x.innerHTML = HM[id];
document.getElementById('shher').innerHTML = x.getElementsByTagName('name')[0].innerHTML;


Все проблемы решил, кроме работы под IE, может кто-то знает. почему данный код не работает под IE?

JsLoveR 05.07.2010 23:32

Madd,
Ну заверните в фун-ю, всё пашет:
function inner()
{
	var HM = new Array();
	HM[1] = "<p>Имя</p>";
	HM[2] = "<p>Имя2</p>";
	var x = document.createElement('div');
	x.innerHTML = HM[1];
	document.getElementById('shher').innerHTML = x.getElementsByTagName('p')[0].innerHTML;
}

<div id="shher"></div>
<script type="text/javascript">inner();</script>

B~Vladi 05.07.2010 23:34

форум != благотворительный фонд
форум == обмен знаниями (не путать с обучением)

Madd 05.07.2010 23:44

JsLoveR,
Во всех браузерах работает, IE пишет такую ошибочку:
Цитата:

Сообщение: 'getElementsByTagName(...).0.innerHTML' - есть null или не является объектом

JsLoveR 05.07.2010 23:47

Цитата:

Сообщение от Madd
IE пишет такую ошибочку

Что в моём коде ? Я тестил в ие6, ие7, ие9 код, всё работает.

B~Vladi 05.07.2010 23:50

Цитата:

Сообщение от Madd
getElementsByTagName(...).0.innerHTML

Ты даже скопировать нормально не можешь. Откуда взялось .0. ?! В его коде было [0]. Как думаешь, в чем отличия?

JsLoveR 05.07.2010 23:51

Цитата:

Сообщение от B~Vladi
getElementsByTagName(...).0.innerHTML

:blink: Точно))

Madd 05.07.2010 23:55

.................................

JsLoveR 06.07.2010 00:00

Madd,
Что есть такой тэг как "<name></name>" ?, измените name на span, по мне ie не понимает такого тэга. Я думал, что Вы под <name> подразумеваете имя любого тэга, а Вы так и пишете.

B~Vladi 06.07.2010 00:03

Цитата:

Сообщение от Madd
во-первых не ТЫ, а ВЫ

С какой стати?:blink:
Цитата:

Сообщение от Madd
ОткроЙ, посмотрИ исходный код

Это я называю говнокодом.

Да, и не плохо было бы узнать, что такое дебагер.

Madd 06.07.2010 00:05

Цитата:

Это я называю говнокодом.
Не только ты, это и есть говнокод.
Станет нормальным, когда я хоть немного разбирусь как динамически хранить куеву тучу данных и удобно их получать в дивах, тогда уже перепишу.

Цитата:

С какой стати?
Правила приличия.

Цитата:

И что такое 'name'?!
Это тег в массиве.

Цитата:

getElementsByTagName
Это стандартная функция Яваскрипта.

JsLoveR 06.07.2010 00:07

Madd, Вам, что тяжело изменить <name></name> на <span></span> ??????????????????

Madd 06.07.2010 00:10

JsLoveR,
Нет, вовсе нет, сейчас попробую объяснить.
Будет что-то вроде:
<name>1</name><name2>2</name2><str>3</str><agi>4</agi>
в каждом массиве, только тегов намного больше, использовать только стандартные теги в данной ситуации совсем неудобно. Поэтому я и спрашиваю совета, как лучше хранить в данном случае динамически отображаемую куеву тучу данных...

JsLoveR 06.07.2010 00:13

Цитата:

Сообщение от Madd
Будет что-то вроде:
<name>1</name><name2>2</name2><str>3</str><agi>4</agi>

Ну тогда будет что-то вроде:
Цитата:

IE пишет такую ошибочку.....
Уже примитивно, нельзя чтоли создать массив строк, поставить на картинку onmouseover="imgName(2)", где 2 - передаваемый параметром в фун-ю индекс массива нужной строки ?

Madd 06.07.2010 00:15

Цитата:

Уже примитивно нельзя чтоли создать массив строк поставить на картинку onmouseover="imgName(2)", где 2 - индекс массива нужной строки ?
Предлагаете сделать двумерный массив? Я думал об этом, но код станет несколько не читаемым, придется сделать более 1000 строк. Все это, конечно, делается 1 простым PHP-скриптом, но вот с правкой данных потом будут трудности :)

B~Vladi 06.07.2010 00:19

Цитата:

Сообщение от Madd
Правила приличия.

А что не приличного в том, что я обращаюсь к тебе на ты?
Цитата:

Сообщение от Madd
Поэтому я и спрашиваю совета, как лучше хранить в данном случае динамически отображаемую куеву тучу данных...

Я тебе давал совет. И не один. В твоем случае - JSON.
Цитата:

Сообщение от Madd
Нет, вовсе нет

Тогда xml.

Madd, у тебя в голове каша. Ты не понимаешь с чем имеешь дело. Как следствие - глупые вопросы и неадекватное поведение. Стоит немного отдохнуть, я считаю.

Madd 06.07.2010 00:22

Цитата:

неадекватное поведение
Тут бы я поспорил.
Цитата:

А что не приличного в том, что я обращаюсь к тебе на ты?
Закроем тему приличия, тут уж кто как воспитан.

Цитата:

Я тебе давал совет. И не один. В твоем случае - JSON.
Ладно, если у Вас действительно нет времени на написание примера, я попробую поискать где-то еще, хотя Вы уже потратили время на опускание меня в этой теме куда больше, чем пишутся 5 простых примеров, хотя просился всего один.

Цитата:

у тебя в голове каша.
Вовсе нет.

Цитата:

Ты не понимаешь с чем имеешь дело.
В точку, именно поэтому я здесь. Мне ява никак не пригодится в жизни, моя задача написать 2 простых функции, я думал, возможно, мне тут помогут, попробовал написать просьбу, так бывает.

JsLoveR 06.07.2010 00:23

function inner(it)
{
	var names = new Array("орк","эльф","человек","гном");
	document.getElementById('shher').innerHTML = names[it];
}

<div><span onmouseover="inner(0)">орк</span> <span onmouseover="inner(1)">эльф</span> <span onmouseover="inner(2)">человек</span> <span onmouseover="inner(3)">гном</span></div>
<br />
<div id="shher"></div>

Если после этого у Вас ничего не выйдет убейте меня об стол.

Madd 06.07.2010 00:28

JsLoveR,
Вы не поняли задачи..
B~Vladi,
Был прав JSON, похоже, то, что нужно, начал читать о нем, первые впечатления положительны..

B~Vladi 06.07.2010 00:29

Цитата:

Сообщение от Madd
5 простых примеров

Я не буду давать тебе простой пример, потому что привык делать все грамотно. Твой же случай в корне не правильный. Поэтому я ограничился советами. Однако же ты даже не пытался, что-то исправить в своем коде. Тебе нужно решение проблемы с ослом. Да, его можно решить в пару строк кода. Если ты сам не можешь пофиксить свои же баги, тебе в раздел работа. Либо сотри все и напиши с нуля, с использованием технологий, которые я тебе предложил. Тогда и поговорим.

B~Vladi 06.07.2010 00:31

Цитата:

Сообщение от Madd
начал читать о нем

Ура, это произошло!

Madd 06.07.2010 00:59

Усе, можно закрыть тему, я разобрался с JSON.


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