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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Плагин для проверки орфографии на странице, На яваскрипт. 
:(
    Опции темы
sergejzr
Дата 17.11.2005, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



У меня серьёзная трабла. Приходится иногда верстать сайты, одновременно занимаюсь серверным и клиентским программированием. Сайты пишутся на нескольких языках. С программированием всё отлично, но вот с орфографией... 50 раз проверю приложение, но при презентации хоть одну ошибку, но кто нить найдёт. Я понимаю, что просто больше на программинге концентрируюсь, чем на орфографии.

Вот бы плагин, который по принципу TMLTidy проверял страницу на орф. ошибки. Сидел бы себе кнопочкой внизу.

Плагин, который я пока нашёл (у меня в подписи сидит) ищет ошибки в textarea при набивке текста. А мне надо бы на всей странице..

Думаю написать его на базе spellbound. Думаю надо разбить документ не слова, потом сверять и подсвечивать те, которых нет в словаре. Вот как на слова разбить?
Итерировать весь документ можно? Как лучше это сделать?


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Ciber_SLasH
Дата 17.11.2005, 03:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Особо не читал, но может ты имеешь ввиду что-то вроде этого?: http://dklab.ru/chicken/nablas/24.html
  Вверх
sergejzr
Дата 17.11.2005, 03:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Нет, система Orphus живёт от количества читателей и их репортов. Мне же нужен именно автомат чтобы проверять страницы ДО публикации


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 17.11.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Документ это DOM дерево, можно дёрнуть все текстовые ноды и разбить по словам. Нельзя сразу брать document.body.(innerText|textContent), так как лажу выдаст для таблиц и других "сложных элементов". Поэтому начиная с document.documentElement пробегаешся по всем элементам, если внутри не находяться таблицы, формы и т.д. то снимаем innerText|textContent, иначе идём глубже и обходим проблемные элементы.

Нашли проблемное слово, юзая методы DOM TextNode вырезаем его деля текстовую ноду на половины, между ними ставим свой элемент <span> с проблемным словом и необходимыми стилями. Только что созданный обьект-span ложим в какой нибудь список, что бы при втором проходе "помнить" что это.

А вообще овчинка выделки не стоит ИМXО, довольно не удобно писать не имея "настоящих" массивов, в результате всё будет подтормаживать. Xотя можно дёргать текст, собирать запрос к серверу, там проверять ispell, результаты юзать. Качество будет лучше, JS проще, скорость высокая. Жаль ispell в браузер не встраиваетсья, а то можно было и на клиенте заюзать smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
sergejzr
Дата 17.11.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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




Цитата(Sardar @ 17.11.2005, 18:30)
Жаль ispell в браузер не встраиваетсья, а то можно было и на клиенте заюзать smile

Sardar, spellbound из моей пописи посмотри smile

Вот у меня вопрос, как обйти
Код

<div> tekst tekst tekst <div>tekt, tekst<div>tekst tekst</div></div></div>



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 18.11.2005, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(sergej @ 17.11.2005, 18:40)
Вот у меня вопрос, как обйти

Можно рекурсивно бежать по DOM дереву. Если элемент, то пробегаемся рекурсивно по его node.childNodes. Если нода текстовая (node.nodeType==3||node.nodeType==4, т.е. текст или CDATA, хотя последних в HTML нет), то снимать её node.nodeValue, резат текст на слова, заменять ошибочные на <span> элементы для подсветки. При этом текстовая нода поделиться на две части, между ними новый элемент.

Главное пометить как нибудь новосозданный span, что бы не проходить и не "подкрашивать" слово по новой. К тому же после деления текстовой ноды и вставки span'а он появиться следующим при проходе.

Собстна в коде это может выглядеть так:

Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
    <title>Untitled</title>
<style type="text/css">
span.hl {
  font-weight: bold;
  text-decoration: underline;
}
</style>
</head>

<body>
<div id='test'> tekst bla tekst tekst <div>tekt, tekst<div>tekst tekst</div></div></div>

<script type="text/javascript">
<!--

function trackText(node) {
  if(node.nodeType==3||node.nodeType==4) { //text
//     alert("Text: "+node.nodeValue);
     var ind=node.nodeValue.indexOf('bla');
     if(ind>=0) { //replace
        var nd1=document.createTextNode(node.nodeValue.substring(0, ind));
        var nd2=document.createTextNode(node.nodeValue.substr(ind+"bla".length));
        var tb=document.createElement('span');
        tb.className='hl';
        tb.innerHTML='bla';
        
        var p=node.parentNode;
        p.replaceChild(nd2, node);
        p.insertBefore(nd1, nd2);
        p.insertBefore(tb, nd2);
     }
  } else if(node.nodeType==1&&node.className!='hl') { //element
//    alert("Node: "+node.tagName+", childs: "+node.childNodes.length);
    for(var i=0; i<node.childNodes.length; i++) {
//      alert("Tracking: "+node.childNodes[i].nodeValue+", i: "+i);
      if(node.childNodes[i].className!='hl') trackText(node.childNodes[i]);
    }
  }
  //ignore everything else
}

trackText(document.getElementById('test'));
alert(document.getElementById('test').innerHTML);
//-->
</script>


</body>
</html>


P.S. пасиб за плагин к Мозилле, давно искал что то подобное.


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


 




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


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

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