Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   свойство innerHTML и Построчное считывание с файла (https://javascript.ru/forum/misc/1566-svojjstvo-innerhtml-i-postrochnoe-schityvanie-s-fajjla.html)

baal1988 14.08.2008 18:11

свойство innerHTML и Построчное считывание с файла
 
Помогите пожалуйста разобраться с кодом думаю что должно все работать но нет ничего не получается требуется вывести из файла построчно строки соответствующие критерию поиска вот код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Сайт</title>
</head>
 
<script type="text/javascript"> 
 
function inner() {
 
    var FSO = new ActiveXObject("Scripting.FileSystemObject"); 
    var file = FSO.OpenTextFile("c:\\filesave.txt", 1, true);
    var poisk = document.getElementById("folk");
    var spisok = document.getElementById("tab_find");
    myArray= new Array();
    var i=0;
 
    spisok.innerHTML += "<table>";
    while (!file.AtEndOfStream)
    {
         myArray[i] = file.ReadLine();
         if(poisk.value.test(myArray[i])==true)
              spisok.innerHTML += "<tr><td>" + myArray[i] + "<\/td><\/tr>";
 
         i=i+1;
      }
    spisok.innerHTML += "<\/table>";
 
}
 
</script>
 
<style type="text/css">
 
</style>
 
<body>
 
<form name="mainform">
 
<div id="number">
    <p>№ Трубы</p>
    <input type="text" name="folk">
    <input type="button" name="button" value="Добавить данные"  onClick="inner()">
</div>
 
<div id="tab_find">
</div>

ZoNT 14.08.2008 18:17

попробуй так:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Сайт</title>
<style type="text/css">
</style>
</head> 
<body>
<form name="mainform">
 
<div id="number">
    <p>№ Трубы</p>
    <input type="text" id="folk">
    <input type="button" name="button" value="Добавить данные"  onClick="inner()">
</div>

<div id="tab_find"></div>

<script type="text/javascript"> 
 
function inner() {
 
    var FSO = new ActiveXObject("Scripting.FileSystemObject"); 
    var file = FSO.OpenTextFile("c:\\filesave.txt", 1, true);
    var poisk = document.getElementById("folk");
    var spisok = document.getElementById("tab_find");
 
	var reg = new RegExp(poisk.value,'gi');
    spisok.innerHTML += "<table>";
    while (!file.AtEndOfStream) {
		var a = file.ReadLine();
		if(reg.test(a)) spisok.innerHTML += "<tr><td>" + myArray[i] + "<\/td><\/tr>";
      }
    spisok.innerHTML += "<\/table>";
 
}
 
</script>
</form>
</body>
</html>

baal1988 14.08.2008 20:36

Цитата:

Сообщение от ZoNT (Сообщение 4568)
попробуй так:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Сайт</title>
<style type="text/css">
</style>
</head> 
<body>
<form name="mainform">
 
<div id="number">
    <p>№ Трубы</p>
    <input type="text" id="folk">
    <input type="button" name="button" value="Добавить данные"  onClick="inner()">
</div>

<div id="tab_find"></div>

<script type="text/javascript"> 
 
function inner() {
 
    var FSO = new ActiveXObject("Scripting.FileSystemObject"); 
    var file = FSO.OpenTextFile("c:\\filesave.txt", 1, true);
    var poisk = document.getElementById("folk");
    var spisok = document.getElementById("tab_find");
 
	var reg = new RegExp(poisk.value,'gi');
    spisok.innerHTML += "<table>";
    while (!file.AtEndOfStream) {
		var a = file.ReadLine();
		if(reg.test(a)) spisok.innerHTML += "<tr><td>" + myArray[i] + "<\/td><\/tr>";
      }
    spisok.innerHTML += "<\/table>";
 
}
 
</script>
</form>
</body>
</html>

Спасибо работает но ; :
1. myArray на a забыл заменить
if(reg.test(a)) spisok.innerHTML += "<tr><td>" + myArray[i] + "<\/td><\/tr>";


2. Есть вопрос почему мой вариант не работает ? где ошибка ...

3. Почему он не в виде таблицы все это выдает теги все пропускает ...

ZoNT 14.08.2008 20:48

ага, забыл поменять на а :)

Не работал потому что у тебя не было элемента с id=folk :)

Ещё poisk.value.test - это не катит, так как poisk.value - это строка, а
тестить надо регулярным выражением.

3. Почему он не в виде таблицы все это выдает теги все пропускает ...
У меня нет файла filesave.txt - посмотреть не на чем (самому писать лень)

И ещё: кучу раз дёргать innerHTML очень плохо, я переделал:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Сайт</title>
<style type="text/css">
</style>
</head> 
<body>
<form name="mainform">
 
<div id="number">
    <p>№ Трубы</p>
    <input type="text" id="folk">
    <input type="button" name="button" value="Добавить данные"  onClick="inner()">
</div>
 
<div id="tab_find"></div>
 
<script type="text/javascript"> 
 
function inner() {
 
    var FSO = new ActiveXObject("Scripting.FileSystemObject"); 
    var file = FSO.OpenTextFile("c:\\filesave.txt", 1, true);
    var poisk = document.getElementById("folk");
    var spisok = document.getElementById("tab_find");
 
    var reg = new RegExp(poisk.value,'gi');
    var str  = "<table>";
    while (!file.AtEndOfStream) {
        var a = file.ReadLine();
        if(reg.test(a)) str += "<tr><td>" + a + "</td></tr>";
      }
    str += "</table>";

    spisok.innerHTML = str;
}
 
</script>
</form>
</body>
</html>

baal1988 14.08.2008 21:08

Цитата:

Сообщение от ZoNT (Сообщение 4577)
ага, забыл поменять на а :)

Не работал потому что у тебя не было элемента с id=folk :)

Ещё poisk.value.test - это не катит, так как poisk.value - это строка, а
тестить надо регулярным выражением.

3. Почему он не в виде таблицы все это выдает теги все пропускает ...
У меня нет файла filesave.txt - посмотреть не на чем (самому писать лень)

И ещё: кучу раз дёргать innerHTML очень плохо, я переделал:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Сайт</title>
<style type="text/css">
</style>
</head> 
<body>
<form name="mainform">
 
<div id="number">
    <p>№ Трубы</p>
    <input type="text" id="folk">
    <input type="button" name="button" value="Добавить данные"  onClick="inner()">
</div>
 
<div id="tab_find"></div>
 
<script type="text/javascript"> 
 
function inner() {
 
    var FSO = new ActiveXObject("Scripting.FileSystemObject"); 
    var file = FSO.OpenTextFile("c:\\filesave.txt", 1, true);
    var poisk = document.getElementById("folk");
    var spisok = document.getElementById("tab_find");
 
    var reg = new RegExp(poisk.value,'gi');
    var str  = "<table>";
    while (!file.AtEndOfStream) {
        var a = file.ReadLine();
        if(reg.test(a)) str += "<tr><td>" + a + "</td></tr>";
      }
    str += "</table>";

    spisok.innerHTML = str;
}
 
</script>
</form>
</body>
</html>

c 1 и 2 разобрался напутал че т я немного а вот с 3 понять не могу , хотя нет когда ты переделал через строку str все заработало выводит как нужно ввиде таблички а почему так ? и почему нельзя часто использовать свойство innerHTML ?

ZoNT 14.08.2008 21:51

потому что при изменении innerHTML браузер перерисовывает страницу, а это КАТАСТРОФИЧЕСКИ медленно.

Почему заработало со строкой: теперь таблица полностью собрана в строке и одним махом записана в иннерХТМЛ, а до этого писались куски, тэг таблицы н был закрыт и браузер не мог понять, что в конце концов всё будет хорошо :)

baal1988 14.08.2008 21:56

Цитата:

Сообщение от ZoNT (Сообщение 4581)
потому что при изменении innerHTML браузер перерисовывает страницу, а это КАТАСТРОФИЧЕСКИ медленно.

Почему заработало со строкой: теперь таблица полностью собрана в строке и одним махом записана в иннерХТМЛ, а до этого писались куски, тэг таблицы н был закрыт и браузер не мог понять, что в конце концов всё будет хорошо :)

Ясно ) спасибо за помощь будем учиться )

ZoNT 14.08.2008 21:57

не за что...


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