Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как записать id всех элементов в массив? (https://javascript.ru/forum/misc/7420-kak-zapisat-id-vsekh-ehlementov-v-massiv.html)

Мараторий 03.02.2010 23:55

Цитата:

Сообщение от SunYang (Сообщение 43468)
Все элементы массива undefined

Это неправда.

Вы запутались в индексах. Иногда метод вдумчивого чтения кода помогает.

JsLoveR 04.02.2010 02:13

SunYang, ну что же Вы путаетесь))
function go1() {
	var arr = [] // массив значений id
	var list = document.getElementsByTagName('*');
	for(i=0; i<list.length; i++) {
	if(list[i].id){
	arr.push(list[i].id);
	}
	
	}
	
 alert(arr);
	}

SunYang 04.02.2010 15:54

Спасибо. Помогло) Чета я совсем туплю)

SunYang 04.02.2010 22:15

А почему вот это
arr[i] = list[i].id;
выдает несколько элементов с id = undefined ?

PeaceCoder 04.02.2010 23:42

Цитата:

Сообщение от SunYang
выдает несколько элементов с id = undefined ?

потому что гладиолус ;)
Цитата:

Сообщение от SunYang
var list = document.getElementsByTagName('*');

эта команда выдает все элементы в том числе и HTML и HEAD и script и т.п. а у них нет id

JsLoveR 05.02.2010 01:28

А метод push() добавляет в массив id, которые определены.

SunYang 06.02.2010 19:36

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

Riim 06.02.2010 19:50

Цитата:

Сообщение от SunYang
метод innerHTML

метод?

JsLoveR 06.02.2010 20:58

Цитата:

Сообщение от SunYang (Сообщение 43778)
Мне нужно записать id только элементов, к которым можно применить метод innerHTML
Это возможно?

Не логично как-то, для чего Вам это надо? innerHTML - это свойство.

SunYang 06.02.2010 22:46

метод, свойство - я не особо разбираюсь. Я пытаюсь написать прогу (HTA-приложение), которая производит запись содержимого ячеек таблицы в файл, а при каждом открытии программы она считывает из файла данные, и вставляет их в ячейки таблицы. Т.к. с php и базами я вообще не знаком (плюс ко всему надо, чтобы прога работала без сервера), пытаюсь организовать что-то типа базы данных на JS
Программа представляет из себя поля ввода и таблицы, куда записываются введенные значения, и кнопки сохранения, чтобы введенные данные сохранить (записать в файл), а при открытии программы автоматически их от туда доставать и подставлять в таблицы.
Вот код:
<HTML>
 <HEAD> 
 <TITLE>Моя программа</TITLE> 
 <HTA:APPLICATION   APPLICATIONNAME="firstHTA"   BORDER=””  CAPTION="yes"  ICON="my.ico"  SHOWINTASKBAR="no"  SINGLEINSTANCE="yes"  SYSMENU="yes"  WINDOWSTATE="normal" ></HEAD><BODY BGCOLOR="ButtonFace" SCROLL="no">
 </HEAD>
 <BODY>
<script>

var filepath1 = "dbID.txt"
var filepath2 = "dbData.txt"


// функция сохранения массива с id-шниками в файл базы айдишников и массива с данными в файл базы с данными
function go1() {
arr = new Array(); // при запуске функции сохранения очищаем массив id-шников
arrData = new Array(); // при запуске функции сохранения очищаем массив данных

// массив значений ID
var list = document.getElementsByTagName('*');
	for(i=0; i<list.length; i++) {
	if(list[i].id){
	arr.push(list[i].id);
	}	
  }

// создаем файл базы данных и записываем строку (массив) с ID
var fso = new ActiveXObject("Scripting.FileSystemObject")
var myfile = fso.CreateTextFile(filepath1)
myfile.Close()
var opnfile = fso.OpenTextFile(filepath1, 2)
opnfile.WriteLine(arr)
opnfile.Close()
// создаем массив из вытащенной строки из файла базы айдишников
var arrStr = arr+'' // строка из массива ID (для разбиения на массив)
var arrID = arrStr.split(',') // массив id-шников

// создаем массив данных, соответствующих айдишникам
for(i=0; i<arrID.length; i++) {
Data = document.getElementById(arrID[i]).innerHTML
arrData[i] = Data // МАССИВ С ДАННЫМИ
}
// создаем файл базы данных и записываем построчно данные из массива с данными плюс разделитель
var fso = new ActiveXObject("Scripting.FileSystemObject")
var myfile = fso.CreateTextFile(filepath2)
myfile.Close()
var opnfile = fso.OpenTextFile(filepath2, 2)
for(i=0; i<arrData.length; i++) {
opnfile.WriteLine(arrData[i]+'_w') // _w - это разделитель для формирования массива данных. Используем его, так как использовать запятую как в случае с массивом айдишников нельзя, т.к. данные могут содержать числа с запятой  
}
opnfile.Close()

}  // Конец функции

// ФУНКЦИЯ ЗАПИСИ ДАННЫХ ИЗ БАЗ ДАННЫХ В ЯЧЕЙКИ ТАБЛИЦ
function go2() {
// вытаскиваем и преобразовываем в массив айдишники из файла базы с айдишниками
var fso = new ActiveXObject("Scripting.FileSystemObject")
var myfile = fso.OpenTextFile(filepath1, 1)
var strID = myfile.ReadLine()
myfile.Close()
var arrID = strID.split(',') // массив айдишников

var fso = new ActiveXObject("Scripting.FileSystemObject")
var myfile = fso.OpenTextFile(filepath2, 1)
var DataStr = myfile.ReadAll()
var DataArr = DataStr.split('_w') // МАССИВ С ДАННЫМИ
myfile.Close()

// записываем в таблицы значения из массива с данными, соответствующие айдишникам из массива с айдишниками
for(i=0; i<arrID.length; i++) {
document.getElementById(arrID[i]).innerHTML = DataArr[i]
}

} // конец функции

</script>



<input type="button" value="Сохранить" onclick="go1()">
<input type="button" value="Извлечь из БД" onclick="go2()">

<table width="600" border="1" cellspacing="0" cellpadding="0">
<tr>
<td align="center" id="a3">Data1</td>
<td align="center" id="b3">Data2</td>
<td align="center" id="c3">Data3</td>
<td align="center" id="d3">Data3</td>
</tr>
</table>
 </BODY>
 </HTML>


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