Удалить вложенный html до того, как начнет работать анализатор jquery.tablesorter?

#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, а также игнорирует все числа, следующие за первым.

Не стесняйтесь улучшать его (например, комбинируя последние две замены).