Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание массива из строк переменной 
V
    Опции темы
NNaarreekk
Дата 8.2.2009, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 2
Всего: 3



Есть у нас переменная:
Код

var x="1\n2\n3\n4\n5";

Как получить:
Код

x[0]=1;
x[1]=2;
...
...
...

split("\n") не предлогать, не работает...Нужно именно для тех случаев когда несколько строк.
PM MAIL WWW   Вверх
bars80080
Дата 8.2.2009, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



в смысле не работает? или у тебя там на самом деле несколько строк? может они чем-то другим соединены?

Добавлено через 34 секунды
кстати, для твоего варианта попробуй ещё .split("/\n");
PM MAIL WWW   Вверх
NNaarreekk
Дата 8.2.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 2
Всего: 3



Цитата(bars80080 @  8.2.2009,  03:29 Найти цитируемый пост)
или у тебя там на самом деле несколько строк?

Не понял ты в каком мытсле спрашиваешь но у меня действительно несколько строк, я эти \n написал длянаглядности.
Просто JS не правельно понимает:
Код

var x="sad asd asld;a sdas das d
as dsa dasd 
as dsa
d as
d sad as
 asd";

ладно объясню по другому:
Код

<textarea id='z'>dsad asd 
sadsad asd
asd asd 
asdsawqe
wq qwe
qw eqw
sadas</textarea>
<script type='text/javascript'>
x=document.getElementById('z').value;
//как из х сделать масив из строк?
</script>

PM MAIL WWW   Вверх
bars80080
Дата 9.2.2009, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



ну, вот такой пример у меня работает в ИЕ7 и опера
Код

<html><body>
<textarea id='z'>dsad asd 
sadsad asd
asd asd 
asdsawqe
wq qwe
qw eqw
sadas</textarea>
<script type='text/javascript'>
var x=document.getElementById('z').value;
var y = x.split("\r\n");
var yl = y.length;
for(var i = 0; i < yl; i++) {
    alert(y[i]);
}
//как из х сделать масив из строк?
</script>
</body></html>


Добавлено через 52 секунды
Цитата(NNaarreekk @  8.2.2009,  14:23 Найти цитируемый пост)
Просто JS не правельно понимает:

в js синтаксис говорит, что конец строки - конец команды. поэтому нельзя разрывать в самом коде скрипта строки
PM MAIL WWW   Вверх
NNaarreekk
Дата 9.2.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 2
Всего: 3



bars80080, но ведь это сработает тока когда у меня \n\r, a если только \n, то нет?

Лучше я покажу что хочу сделать а там и другой вариант найдется!
Код

function $(obj){return document.getElementById(obj);}
function templateLine(type,N){
    if(type=='add'){
        $('mmTemplate').innerHTML+="<BR>"+str;
    }
    if(type=='delete'){
        newHTML='';
        innerTemp=$('mmTemplate').innerHTML;
        innerTemp=innerTemp.split("<BR>");
        innerTempCount=innerTemp.length;
        for(i=0;i<innerTempCount;i++){
            search='mmName'+N;
            if(!innerTemp[i].match(search) && innerTemp[i]!=''){
                if(newHTML!='')newHTML+="<BR>"+innerTemp[i];
                else newHTML+=innerTemp[i];
            }
        }
        $('mmTemplate').innerHTML=newHTML;
    }
}

Здесь в str хранится что-то типа <input type='text'...
Вот проблема в том что br в разных броузерах хранится по разному, скажем в IE <BR>, а в ff <br>
PM MAIL WWW   Вверх
ksnk
Дата 9.2.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Ну, регулярки, вроде, пока не отменяли...
Код

var y = x.split(/\r\n|\n|\r/);



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
NNaarreekk
Дата 9.2.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 2
Всего: 3



Цитата(ksnk @  9.2.2009,  20:38 Найти цитируемый пост)
var y = x.split(/\r\n|\n|\r/);

Ну ладно убедили!!!
Я могу сделать вывод что в Яаваскрипте нет функций для работы с строками?
PM MAIL WWW   Вверх
ksnk
Дата 9.2.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



NNaarreekk
Цитата

Я могу сделать вывод что в Яаваскрипте нет функций для работы с строками? 

Сильный вывод!
Вообще-то почти все приведенные в этом посте функци так или иначе работают со строками  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
NNaarreekk
Дата 9.2.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 2
Всего: 3



Ладно посмотрим с другой стороны, если в инпут клиен введет \n то сплит по innerHTML порвет текст с неправельного места, а этого очень не хочется!
Я не понимаю никто не сталкивался с проблемой создания скажем уплоадера когда можно было добавлять инпуты еще и удалять??
Как вы сделали это??
Я даже на винграде видел что-то подобное но немогу найти!
PM MAIL WWW   Вверх
ksnk
Дата 9.2.2009, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Вообще-то довольно сложно ввести в правильно организованный input полноценный символ перевода строки. для этого нужно пользоваться textarea. И какие проблемы будут с textarea? Кто кого должен порвать?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
NNaarreekk
Дата 9.2.2009, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 2
Всего: 3



Цитата(ksnk @  9.2.2009,  21:50 Найти цитируемый пост)
Кто кого должен порвать? 

Я порвать про сплит говорил)

Ладно просто определю броузер и потом каждому свой код напишу!
А то как я понял конкретной функции нет, так-что все равно ручками придется делат! smile 
PM MAIL WWW   Вверх
bars80080
Дата 9.2.2009, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



NNaarreekk, в этой теме три варианта предложенной тобой задачи, но хоть убей, всё равно не понятно в чём проблема.

jquery я не знаю, поэтому и сказать по коду ничего не могу

но касательно этой фразы: 
Цитата(NNaarreekk @  9.2.2009,  18:30 Найти цитируемый пост)
Я не понимаю никто не сталкивался с проблемой создания скажем уплоадера когда можно было добавлять инпуты еще и удалять??

нет, я не сталкивался с проблемой добавления инпутов и удаления. что сложного? если нужно докидать просто инпуты, то вставляем их, как в innerHTML += '<input />'; если нужен полноценный кусок, то лучше заниматься клонированием нодов. во втором случае легче добиться удаления созданных блоков

а какая у тебя проблема - всё равно не знаю
PM MAIL WWW   Вверх
NNaarreekk
Дата 9.2.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 2
Всего: 3



Цитата(bars80080 @  10.2.2009,  00:15 Найти цитируемый пост)
а какая у тебя проблема - всё равно не знаю 

Проблема очь простая. Мне нужно сплитить текст по  кое-чему невидимому, который во всех броузерах в инерХТМЛ пишется одинаково(имею ввиду регистр).
PM MAIL WWW   Вверх
bars80080
Дата 10.2.2009, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Цитата(NNaarreekk @  9.2.2009,  22:00 Найти цитируемый пост)
Проблема очь простая. Мне нужно сплитить текст по  кое-чему невидимому, который во всех броузерах в инерХТМЛ пишется одинаково(имею ввиду регистр). 

в очередной раз думаешь, что объяснил?
разве сплитить - самоцель?
знаешь, задача обычно материальная, а не абстрактная. к примеру, мне нужно, чтобы пользователь мог увеличить количество полей ввода. или хочу сделать предварительную проверку на клиентской стороне, чтобы не гонять лишний раз на сервер. или создаю развлекательную страничку, где пользователь вводит данные в поля, а потом они раскидываются по заготовленному тексту.
это конкретные задачи. а что у тебя?
PM MAIL WWW   Вверх
NNaarreekk
Дата 10.2.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 2
Всего: 3



Цитата(bars80080 @  10.2.2009,  03:02 Найти цитируемый пост)
в очередной раз думаешь, что объяснил?

Я сейчас повешусь!!!

Так попробуем:
Есть на сайте раздел где клиент может создавать формы....Он вводит название поля его тип и стиль..Полей может быт бесконечно...Во он с помощью вышеупомянутого плюса добавляет еще одну строку с инпутами в которых он вставляет название в форме его тип и стиль....А потом клиент понимает что одна строка не нужна и решает его удалить, удалить можно не тока последнюю строку но и любую другую.

Как это реализовать?
PM MAIL WWW   Вверх
bars80080
Дата 10.2.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



ну вот смотри, далее выдержки из моих скриптов

есть блок который я клонирую:
Код

<tbody id="tabFormU0" class="tabFormU">
<tr><td class="col1">Срок</td><td class="col2"><select name="fUn[]"><option></option></select></td></tr>
<tr><td class="col1">Процент завершения</td><td class="col2"><input type="text" name="fproc[]" value="20" class="txt" /></td></tr>
<tr><td class="cornerLB">Состояние задачи</td><td class="cornerRB"><select name="fcond[]" >
<option value="0" >Не начата</option></select>

<div class="regElem"><input type="button" onclick="TFdelUser(this);" title="удалить" value=" " class="trash" /></div></td></tr>
</tbody>

по нажатию стоящей в стороне кнопки:
<input type="button" onclick="TFaddUser();" value="добавить" class="but" />

Код

function TFaddUser() {
    // само клонирование
    var t = document.getElementById('tabForm');
    var numUEl = document.getElementById('idfnumUser');
    var numU = numUEl.value;
    var allTB = t.getElementsByTagName('tbody');
    var allTBl = allTB.length;
    var oldTB = allTB[allTBl - 2];
    var newTB = oldTB.cloneNode(true);
    var lasTB = allTB[allTBl - 1];
    newTB.id = 'tabFormU' + numU;
    t.insertBefore(newTB, lasTB);

    // здесь занимаемся дублированием значений из старого нода в новый
    var oldEs = oldTB.getElementsByTagName('select');
    var oldEl = oldEs.length;
    var newEs = newTB.getElementsByTagName('select');
    for(var i = 0; i < oldEl; i++) {
        newEs[i].selectedIndex = oldEs[i].selectedIndex;
    } 
    
    // обновляем количество пунктов
    numU++;
    numUEl.value = numU;
}

где <input type="hidden" name="fnumUser" value="2" id="idfnumUser" /> - поле в котором я храню количество существующих пунктов
t - таблица
в блоке есть кнопка удалить TFdelUser(this);
Код

function TFdelUser(x) {
    x.parentNode.parentNode.parentNode.parentNode.removeNode(true);
    var numUEl = document.getElementById('idfnumUser');
    var numU = numUEl.value;
    numU--;
    numUEl.value = numU;
}

удаление и уменьшение количества пунктов

примерно так

п.с. да, для файерфокса и оперы (за что я их не люблю) приходится вешать в начало скрипта:

Код

if(!window.ActiveXObject) {
    HTMLElement.prototype.removeNode = function(removeChildren) {
        if(Boolean(removeChildren)) { return this.parentNode.removeChild(this); }
        else {
            var r = document.createRange();
            r.selectNodeContents(this);
            return this.parentNode.replaceChild(r.extractContents(),this);
        }
    }
}
так как эти субчики не имеют метода removeNode
PM MAIL WWW   Вверх
NNaarreekk
Дата 10.2.2009, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 768
Регистрация: 23.6.2007
Где: Армения

Репутация: 2
Всего: 3



bars80080, спасибо, то что нужно!
Правда пока настроил похудел! smile 

Вот полностью настроенная версия:
Код

<html>
<head>
<script  type='text/javascript'>
function TFaddUser() {
    // само клонирование
    var t = document.getElementById('tabForm');
    var numUEl = document.getElementById('idfnumUser');
    var numU = numUEl.value;
    var allTB = t.getElementsByTagName('tbody');
    var allTBl = allTB.length;
    var oldTB = allTB[allTBl - 1];
    var newTB = oldTB.cloneNode(true);
    var lasTB = allTB[allTBl - 1];
    newTB.id = 'tabFormU' + numU;
    t.insertBefore(newTB, lasTB);
    // здесь занимаемся дублированием значений из старого нода в новый
    var oldEs = oldTB.getElementsByTagName('select');
    var oldEl = oldEs.length;
    var newEs = newTB.getElementsByTagName('select');
    for(var i = 0; i < oldEl; i++) {
        newEs[i].selectedIndex = oldEs[i].selectedIndex;
    } 
    
    // обновляем количество пунктов
    numU++;
    numUEl.value = numU;
}
function TFdelUser(x) {
    x.parentNode.parentNode.parentNode.parentNode.removeNode(true);
    var numUEl = document.getElementById('idfnumUser');
    var numU = numUEl.value;
    numU--;
    numUEl.value = numU;
}
if(!window.ActiveXObject) {
    HTMLElement.prototype.removeNode = function(removeChildren) {
        if(Boolean(removeChildren)) { return this.parentNode.removeChild(this); }
        else {
            var r = document.createRange();
            r.selectNodeContents(this);
            return this.parentNode.replaceChild(r.extractContents(),this);
        }
    }
}
</script>
</head>
<body>
<input type="button" onclick="TFaddUser();" value="добавить" class="but" />
<input type="hidden" name="fnumUser" value="2" id="idfnumUser" />
<table id='tabForm'>
<tbody id="tabFormU0" class="tabFormU">
<tr><td class="col1">Срок</td><td class="col2"><select name="fUn[]"><option></option></select></td></tr>
<tr><td class="col1">Процент завершения</td><td class="col2"><input type="text" name="fproc[]" value="20" class="txt" /></td></tr>
<tr><td class="cornerLB">Состояние задачи</td><td class="cornerRB"><select name="fcond[]" >
<option value="0" >Не начата</option></select>
<div class="regElem"><input type="button" onclick="TFdelUser(this);" title="удалить" value=" " class="trash" /></div></td></tr>
</tbody>
</table>
</body>
</html>


Все, тему закрою!
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0971 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.