Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 30.10.2010, 09:22
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

Сообщение от Kolyaj Посмотреть сообщение
А зачем тут try-catch вообще? Операции сравнения ошибку не бросят.
Это остаточное явление. Когда-то в одном из вариантов функции (может быть, при return (a-b)?) ошибки в ИЕ были. Сейчас try-catch уже нету (в последней версии: tabsort3a.js, рабочий пример в 14000 строк: latrus.htm).

Последний раз редактировалось stopkran, 30.10.2010 в 09:42.
Ответить с цитированием
  #12 (permalink)  
Старый 30.10.2010, 09:34
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

Сообщение от vflash Посмотреть сообщение
а это просто шедевр. извините
Извинить не могу:-). Ирония была бы более-менее оправданна, если бы вы хотя бы про addClass() писали. Это же тайное оружие пролетариата: hasClass() ведь вызывается из addClass(), зачем же два раза ДОМ дёргать, если можно передать для анализа строку? Вы говорите, try-catch (которого, кстати, в последней версии уже нет) замедляет работу. Лишний раз извлекать className элемента - тоже замедляет (особенно с учётом того, что это делается в цикле раз 500 или даже 14000, как в примере latrus.htm).

Последний раз редактировалось stopkran, 30.10.2010 в 09:40.
Ответить с цитированием
  #13 (permalink)  
Старый 30.10.2010, 10:03
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

function hasClass(obj, c) {
 //http://ir2.ru/javascript-if.aspx
 if (!c || !obj) return false   // можно просто return 
 var re = new RegExp('(\\s+|^)' + c + '(\\s+|$)', 'ig') // каждый рас создается новый обьект регулярного выражения. а если с=".*" или пуста "" ?  имя класса регистрозависимо.
 if (typeof obj == "string") obj = {className: obj} // зачем создаете еше один обьект. это дешево конечно но зачем.
 return (re.test(obj.className)) ? re : false // зачем возвращать регулярное выражение ? 
}


вот еше, найдите сами.
function getCookie(name) {
 var value=new RegExp("(^|;)\\s*"+name+"\\s*\\=\\s*([^;]+)($|;)","i").exec(unescape(document.cookie));
 return value && value[2];
}
__________________
лучшая rss читалка zzreader.com
Ответить с цитированием
  #14 (permalink)  
Старый 30.10.2010, 11:18
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

Сообщение от vflash Посмотреть сообщение
return false // можно просто return
Можно. Это, наверное, больше вопрос стиля.

Сообщение от vflash Посмотреть сообщение
// каждый рас создается новый обьект регулярного выражения
Думал уже об этом. Но как вынести регэксп из функции, если там используется переменная (c)? Если подскажете решение, буду благодарен.

Сообщение от vflash Посмотреть сообщение
а если с=".*" или пуста "" ?
Если с=".*", не знаю (это в каком месте HTML или CSS кода такое возможно?). Ну, наверное, будет сообщение отладчика "Правило проигнорировано из-за плохого селектора". Если с="" (пуста) будет "return false" (строка 3).

Сообщение от vflash Посмотреть сообщение
имя класса регистрозависимо.
.ть, просмотрел! Не вы первый носом тычете. В "библиотеке" http://ir2.ru/ir2.js исправил, а саму библиотеку из экономии решил к сортировщику не подключать (скопировал туда нужные функции).

Сообщение от vflash Посмотреть сообщение
if (typeof obj == "string") obj = {className: obj} // зачем создаете еше один обьект. это дешево конечно но зачем.
А как? Я допускаю на входе и строку, и объект. Дальше надо проверять
re.test(obj.className)
. Если там всё-таки строка (у obj нету className), условия что ли использовать? Так:
if (typeof obj == "string") re.test(obj.className) else re.test(obj)
? Ну, вероятно, можно как-нибудь в "новом стиле":
re.test(obj && obj.className)
, но это проверять нужно... Руки дойдут - подумаю.

Сообщение от vflash Посмотреть сообщение
return (re.test(obj.className)) ? re : false // зачем возвращать регулярное выражение ?
Всё из той же экономии. В других библиотеках то, что вам не понравилось ("Каждый раз создаётся новый регэксп"), происходит дважды: в hasClass и в addClass (или delClass).

Не знаю, что вам не нравится в getCookie(). Не могу догадаться. Пока они нормально соотносятся с моими же setCookie() и это работает во всех браузерах...

Последний раз редактировалось stopkran, 30.10.2010 в 11:36.
Ответить с цитированием
  #15 (permalink)  
Старый 30.10.2010, 18:31
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

Цитата:
с=""
эт конечно с потолка взял пример, чтобы указать на ошибку. вообше тут правильно разбивать в массив и потом искать obj.className.split(/\s+/).indexOf(c) . а на практике в начале и конец добавляют пробелы и ишут уже используя (" "+obj.className+" ").indexOf(" "+c+" ") !== -1 , это правда не по стандарту но зато быстро.

в getCookie unescape делать нужно для значения а не для всей куки
__________________
лучшая rss читалка zzreader.com
Ответить с цитированием
  #16 (permalink)  
Старый 02.11.2010, 04:37
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

Сообщение от vflash
и ишут уже используя (" "+obj.className+" ").indexOf(" "+c+" ") !== -1 , это правда не по стандарту
Отчего же это "не по стандарту"? Мне понравилось. Сам давно делаю так на PHP, а тут, видимо, инерция помешала (образцы из чужих библиотек). Теперь сделал hasClass именно так; но для остальных функций (удаление, замена класса) регэксп всё-таки нужен: tabsort3b.js
Ответить с цитированием
  #17 (permalink)  
Старый 02.11.2010, 04:53
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

Сообщение от vflash
в getCookie unescape делать нужно для значения а не для всей куки
Я бы с удовольствием, но только не знаю, как получить значение куки без регэкспа, в котором допускаются русские буквы. Что ли сначала делать escape(регэксп), потом получить значение, а потом unescape? Или тоже всё через indexOf, как в jQuery?

Последний раз редактировалось stopkran, 02.11.2010 в 04:59.
Ответить с цитированием
  #18 (permalink)  
Старый 03.12.2010, 07:09
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

обновление скрипта
Появилась новая версия Сортировщика HTML таблиц - http://ir2.ru/tabsort3.js

Там можно работать "в режиме словаря" (отметить в секции настройки is_dict = true), при этом скрипт будет создавать нечто вроде индексов, позволяющих находить (по целому слову) строку в таблице с очень высокой скоростью.

Пример - http://ir2.ru/latrus.htm (Латинско-русский словарь, 14000 слов).

Ну, и всякие paginate улучшены.
Ответить с цитированием
  #19 (permalink)  
Старый 09.12.2010, 09:03
Аспирант
Отправить личное сообщение для stopkran Посмотреть профиль Найти все сообщения от stopkran
 
Регистрация: 12.12.2009
Сообщений: 54

Simple Table Sorter
Готова версия 0 скрипта Simple Table Sorter. Пример: http://ir2.ru/SimpleTableSorter.zip (13 KB). В нём всего 57 строк:

(function(){
 var a_re = /[cdu]\_\d+\_[cdu]/, a_color = 1

 var hc = function (s, c) {return (" " + s + " ").indexOf(" " + c + " ") !== -1},
 ac = function (e, c) {var s = e.className; if (!hc(s, c)) e.className += " " + c}

 prepTabs = function (t){
  var el, th, cs, c, cell, axis, ts = (t && t.className) ? [t] : document.getElementsByTagName("table")
  for (var e in ts) {
   el = ts[e]
   if (!hc(el.className, "sortable")) continue
   if (!el.tHead) {
    th = document.createElement("thead")
    th.appendChild(el.rows[0])
    el.appendChild(th)
   }
   th = el.tHead
   ac(th, "c_0_c")
   th.title = "Сортировать"
   th.onclick = clicktab
   el.sorted = NaN
  }
 }

 var clicktab = function (e) {
  e = e || window.event
  var obj = e.target || e.srcElement
  while (!obj.tagName.match(/^(th|td)$/i)) obj = obj.parentNode
  var i = obj.cellIndex, t = obj.parentNode
  while (!t.tagName.match(/^table$/i)) t = t.parentNode

  var cn = obj.className, verse = /d\_\d+\_d/.test(cn),
  dir = (verse) ? "u" : "d", new_cls = dir + "_" + a_color + "_" + dir
  if (a_color < 8) a_color++
  if (a_re.test(cn)) obj.className = cn.replace(a_re, new_cls)
  else obj.className = new_cls

  var j = 0, tb = t.tBodies[0], rows = tb.rows, l = rows.length, c, v, vi
  if (i !== t.sorted) {
   t.sarr = []
   for (j; j < l; j++) {
    c = rows[j].cells[i]
    v = (c) ? (c.innerHTML.replace(/\<[^<>]+?\>/g, "")) : ""
    vi = Math.round(100 * parseFloat(v)).toString()
    if (!isNaN(vi)) while (vi.length < 10) vi = "0" + vi
    else vi = v
    t.sarr[j] = [vi, rows[j]]
   }
  }
  t.sarr = (verse) ? t.sarr.reverse() : t.sarr.sort()
  t.sorted = i

  for (j = 0; j < l; j++) tb.appendChild(t.sarr[j][1])
  obj.title = "Отсортировано по " + ((verse) ? "убыванию" : "возрастанию")
 }

 window.onload = prepTabs
})()

Последний раз редактировалось stopkran, 11.12.2010 в 12:54.
Ответить с цитированием
  #20 (permalink)  
Старый 09.12.2010, 10:35
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от stopkran
Делать ли таблицу полосатой («зебра»)?
Сообщение от Kolyaj
Не надо.
Kolyaj, а почему?

Последний раз редактировалось x-yuri, 09.12.2010 в 11:42.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка данных в textarea из модального окна (для Markitup) Roman Koff jQuery 0 26.08.2010 23:21
База данных. Работает только в IE. Izgoj Javascript под браузер 9 29.10.2009 17:20
Сортировка числовых данных в таблице Vladsss Общие вопросы Javascript 15 01.09.2009 17:02
Синхронный запрос данных по AJAX Shasoft AJAX и COMET 2 03.03.2009 14:07
Хранимая область данных. PolarWolf Общие вопросы Javascript 17 14.01.2009 18:25