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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти текст внутри div-a 
V
    Опции темы
Sunvas
  Дата 16.5.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

Репутация: нет
Всего: 89



Есть <div class="divclass" id='dicid'>{какой-то текст}</div>. Нужно написать функцию которая определяла бы есть ли заданый текст внутри div-a или нет. Если есть - вернуть его позицию, если нет - вернуть 0. Желательно кроссбраузерность.  smile 
Код

function istextindiv(divid,text){
//Дальше не знаю что писать
}



Это сообщение отредактировал(а) Sunvas - 16.5.2007, 23:08


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Burrr
Дата 16.5.2007, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



Код
<script type="text/javascript">
function istextindiv(divId, text) {
    var div = document.getElementById(divId);
    var divText = div.innerText ? div.innerText : div.textContent;
    if (typeof divText == 'undefined') divText = "";
    return divText.indexOf(text) == -1 ? 0 : divText.indexOf(text);
}
</script>
<div id='dicid_1'>{какой-то текст}</div>
<div id='dicid_2'>цуцуцу</div>
<div id='dicid_3'></div>
<script type="text/javascript">
// Проверка
alert(
    istextindiv("dicid_1", "текст") + "\n" +
    istextindiv("dicid_2", "текст") + "\n" +
    istextindiv("dicid_3", "текст")
);
</script>


Проверил в ИЕ6, ФФ1.5 и Опера 9.01


--------------------
PM MAIL ICQ   Вверх
Stampede
Дата 17.5.2007, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 4
Всего: 144



Burrr, ты зря воспринял "спецификацию заказчика" слишком близко к сердцу. Он просто не подумал, что позиция найденного текста может быть нулевой. Как он в таком случае будет определять, вернули ли ему ноль потому что строка не найдена, или потому что она стоит в самом начале?

В итоге ты написал функцию, с которой неизвестно как работать, да еще к тому же дважды вычисляешь indexOf() в случае нахождения строки.

Мораль: никогда не принимайте требования заказчика за чистую монету. Чаще всего они сами не представляют, чего хотят. Добивайтесь от них, чтоб было как в анекдоте: "ты не умничай, ты пальцем покажи" smile


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Burrr
Дата 17.5.2007, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



На основании этого кода всё доработать можно легко, основное и так понятно.
Stampede, почему неизвестно как? Что хотели, то и получили. Если хотим, можем получать просто return divText.indexOf(text);
А от 2-х вызовов indexOf еще никто не умирал ;)
Но за совет спасибо, то что я пропустил возврат нулевой позиции однозначно косяк.


--------------------
PM MAIL ICQ   Вверх
Stampede
Дата 17.5.2007, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 4
Всего: 144



Мой пойнт был: из функции возвращать непосредственно результат divText.indexOf(text), а 
Sunvas'у объяснить в популярной форме, что это для его же блага smile

Цитата(Burrr @  16.5.2007,  15:18 Найти цитируемый пост)
А от 2-х вызовов indexOf еще никто не умирал ;)


А вот это уже отнюдь не безобидное заявление. Тут уже пахнет мировоззренческими разногласиями. И я прямо скажу: с таким подходом недолго и прокидаться. Безо всяких смайлов. Так что предлагаю задуматься.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Sunvas
Дата 17.5.2007, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

Репутация: нет
Всего: 89



Цитата(Stampede @  17.5.2007,  00:03 Найти цитируемый пост)
Он просто не подумал, что позиция найденного текста может быть нулевой

Stampede, нулевой это как? Или в JavaScript-e все считается с 0? Просто привык все считать с 1.

Burrr, +1.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Burrr
Дата 17.5.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 459
Регистрация: 4.9.2005

Репутация: 10
Всего: 20



Sunvas, да, в JavaScript первое вхождение стоящее в начале строки имеет нулевую позицию, поэтому лучше юзай такой вариант:
Код
<script type="text/javascript">
function istextindiv(divId, text) {
    var div = document.getElementById(divId);
    var divText = div.innerText ? div.innerText : div.textContent;
    if (typeof divText == 'undefined') divText = "";
    return divText.indexOf(text);
}
</script>
<div id='dicid_1'>{какой-то текст}</div>
<div id='dicid_2'>цуцуцу</div>
<div id='dicid_3'></div>
<script type="text/javascript">
// Проверка
alert(
    istextindiv("dicid_1", "текст") + "\n" +
    istextindiv("dicid_2", "текст") + "\n" +
    istextindiv("dicid_3", "текст")
);
</script>

Если нода пустая или  совпадений нет, то вернется -1. Если совпадение есть, то вернется его позиция.


Stampede, к таким вещам надо относится проще и дело не в мировозрении. При написании той строки я выбирал между двумя вариантами:
Код
return divText.indexOf(text) == -1 ? 0 : divText.indexOf(text);
// или
var position = divText.indexOf(text);
return position == -1 ? 0 : position;

И выбрал первый, чтобы не плодить лишнюю строчку кода, т.к. на скорость работы скрипта вычисление 2-х indexOf особо не влияет. Вообщем-то совсем не влияет. Если бы вместо indexOf стоял стояла функция или более медленные вычесления, был бы выбран второй вариант написания.
Всё.


--------------------
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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