#jquery #tablesorter
#jquery #сортировщик таблиц
Вопрос:
У меня несколько анализаторов, и в одном столбце проблема, потому что он содержит скрытое содержимое (поле наведения курсора мыши). Чтобы избежать этой проблемы, я хочу удалить весь вложенный контент.
например.:
<td>50,3<span>12 payments</span></td>
<td>20,1<span>230 payments</span></td>
Мой анализатор преобразует число в немецком формате в число с плавающей точкой:
$.tablesorter.addParser({
id: "floatval",
is: function(s) {
return false;
},
format: function(s) {
return s.replace(/./g,"").replace(/,/g,".").replace(/[^0-9-.]/g, "");
},
type: "numeric"
});
Но в этом специальном столбце мне также нужно удалить вложенный html. На данный момент я использовал специальный анализатор, который выполняет оба, но я подумал, есть ли решение изменить строку до того, как она пройдет через анализатор (анализатор удаляет теги html, поэтому я теряю возможность удалять вложенный html) ?!
с уважением
Ответ №1:
Попробуйте использовать textExtraction
вместо (демо):
$('table').tablesorter({
textExtraction: function(node){
return node.childNodes[0].nodeValue;
}
});
Что это делает, так это захватывает значение самого первого узла (в данном случае текстового узла), поэтому вы не можете обернуть текст в промежуток (или что-то еще), иначе эта функция не будет работать должным образом.
Комментарии:
1. Это не работает, поскольку некоторые столбцы имеют вложенные значения, а некоторые нет. например
<td>12.1</td>
, а другой есть<td><span onclick="do_something()">strong</span><span class="hidden">details</span></td>
. Можно ли определить textExtraction для определенного столбца?2. На самом деле, вы не можете в оригинальной версии tablesorter. Но я раздвоил копию плагина и внес множество улучшений, включая определение textExtraction для каждого столбца — посмотрите демонстрацию здесь .
3. выглядит хорошо. подождите немного. Я предложу новый фильтр для чисел в течение короткого времени. он удаляет вложенные теги и способен считывать все числовые форматы (us, de, fr, ch и т. Д.).
4. в качестве ответа добавлен новый фильтр 🙂
Ответ №2:
ОК. Через два дня я, надеюсь, закончил фильтр.
Может быть, лучше заменить основные фильтры сортировки таблиц «процент», «валюта» и «цифра» на этот мощный фильтр цифр:
// return floating point number (handles 1.- or 1.--)
s = parseFloat(
// remove whitespace 1 234,56 and quote 1'234,56 followed by three digits
s.replace(/[' ](?=[0-9]{3})/g, '')
// remove all html tags and linebreaks
.replace(/(<.*?>|s)/g, ' ')
// remove anything after last digit of first number
.replace(/([0-9])[^0-9-.,].*/, '$1')
// replace commas by dots
.replace(/,/g, '.')
// remove anything except floating point
.replace(/[^0-9-.]/g, '')
// remove all dots except the last one
.replace(/.(?=.*?.)/g, '')
);
ДЕМОНСТРАЦИЯ:
http://www.programmierer-forum.de/html/javascript-parse-float-extended.html
Как вы можете видеть, он работает со всеми международными форматами чисел (us, de, ch и т. Д.) И Типами (валюта, процент, целое число, число с плавающей запятой и т. Д.) И Удаляет все вложенные теги html, а также игнорирует все числа, следующие за первым.
Не стесняйтесь улучшать его (например, комбинируя последние две замены).