|
|
|
| Не подскажете ли скрипт поиска заданного текста по <textarea> ? В данный момент пользуюсь криво выдранным из vBuleetin-админки "поисковиком", но выдран он очень криво, поэтому работает он только в IE, и то с грехом на пополам. Вот скрипт, который имею на руках:
<script language="JavaScript">
function findInPage(str)
{
var userAgent = navigator.userAgent.toLowerCase();
var is_opera = (userAgent.indexOf('opera') != -1);
var is_saf = ((userAgent.indexOf('applewebkit') != -1) || (navigator.vendor == "Apple Computer, Inc."));
var is_webtv = (userAgent.indexOf('webtv') != -1);
var is_ie = ((userAgent.indexOf('msie') != -1) && (!is_opera) && (!is_saf) && (!is_webtv));
var is_ie4 = ((is_ie) && (userAgent.indexOf("msie 4.") != -1));
var is_moz = ((navigator.product == 'Gecko') && (!is_saf));
var is_kon = (userAgent.indexOf('konqueror') != -1);
var is_ns = ((userAgent.indexOf('compatible') == -1) && (userAgent.indexOf('mozilla') != -1) && (!is_opera) && (!is_webtv) && (!is_saf));
var is_ns4 = ((is_ns) && (parseInt(navigator.appVersion) == 4));
var win = window;
var n = 0;
var txt, i, found;
if (str == '')
{
return false;
}
if (is_ns || is_moz)
{
if (!win.find(str, false, true))
{
while(win.find(str, false, true))
{
n++;
}
}
else
{
n++;
}
if (n == 0)
{
alert('Ничего не найдено !');
}
}
if (is_ie)
{
txt = win.fetch_object('ta_template').createTextRange();
for (i = 0; i <= n && (found = txt.findText(str)) != false; i++)
{
txt.moveStart('character', 1);
txt.moveEnd('textedit');
}
if (found)
{
txt.moveStart('character', -1);
txt.findText(str);
txt.select();
txt.scrollIntoView(true);
n++;
}
else
{
if (n > 0)
{
n = 0;
findInPage(str);
}
else { alert('Ничего не найдено !'); }
}
}
return false;
}
</script>
|
| |
|
|
|
|
|
|
|
для: DDK
(04.02.2006 в 11:41)
| | Э... хотелось бы поднять тему... Вопрос для меня актуален до сих пор. | |
|
|
|
|
|
|
|
для: DDK
(08.02.2006 в 15:07)
| | Да просто замени на поиск по .value, и будет работать везде. В простом случае .value.indexOf('cтрока'), а чтобы выделить, придётся использовать Range, textRange, select() (не будет в Опере до 8-й версии) | |
|
|
|
|
|
|
|
для: 12345
(08.02.2006 в 15:35)
| | Ээ... а поподробней можно ? :) | |
|
|
|
|
|
|
|
для: DDK
(08.02.2006 в 16:57)
| | Тема поиска - разноплановая, каждый раз хочется алгоритм улучшить, пока он не превратится в довольно увесистый. Давайте коллективно: пишу основу для ie:
Поиск в textarea<br><br>
<script>d=document;
function findInTextarea(t,tc){
tc.style.backgroundColor='';
var r=t.createTextRange();
if(r.findText(tc.value)){r.scrollIntoView(!0);r.select();}
else tc.style.backgroundColor='#eebbbb';
}
</script>
<textarea id=ta1 rows=8 cols=70>12345
67890
</textarea><br>
<input type=button value=Find:
onclick=findInTextarea(d.getElementById('ta1'),d.getElementById('in1'))>
<input id=in1 value=67>
| Он находит первое обнаружение строки и повторяет исходный (только вместо алерта - подсветка фона поля ввода при неудаче). | |
|
|
|
|
|
|
|
для: 12345
(08.02.2006 в 18:18)
| | Ээ... Э-э-эе!
Ну где прогресс? :)
Для мозиллы/FF такой аппендикс. Подобным образом и Оперу можно обделать (и ie), но есть в FF такой недостаток - нет прокрутки к видимой области. Делать грубой силой - считать строки - не хочется. Но если есть практическая задача, то вы догадались о пути её решения.
Тут решали подобное: http://blog.existence.ru/exception@2005.06/exception@2005.06.11:5$4
Поиск в textarea<br><br>
<script>d=document;
function findInTextarea(t,tc){
tc.style.backgroundColor='';
if(d.all){var r=t.createTextRange();
if(r.findText(tc.value)){r.scrollIntoView(1);r.select();}
else tc.style.backgroundColor='#eebbbb';
}else{
var c=tc.value;
var i=t.value.indexOf(c);
if(i>=0)t.setSelectionRange(i, i+c.length)
else tc.style.backgroundColor='#eebbbb';
}
}
</script>
<textarea id=ta1 rows=8 cols=70>12345
67890
</textarea><br>
<input type=button value=Find:
onclick=findInTextarea(d.getElementById('ta1'),d.getElementById('in1'))>
<input id=in1 value=67>
|
| |
|
|
|