Удалить вложенный HTML до того, как парсер jquery.tablesorter начнет работать? - PullRequest
1 голос
/ 10 октября 2011

У меня есть несколько парсеров, и в одном столбце есть проблема, потому что она содержит скрытый контент (блок мыши).Чтобы избежать этой проблемы, я хочу удалить весь вложенный контент.

fe:

<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)?!

С уважением

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Хорошо. Надеюсь, что через два дня я закончил фильтр.

Может быть, лучше заменить базовые фильтры сортировки таблиц "проценты", "валюта" и "цифра" на этот мощный цифровой фильтр:

// 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-синтаксический анализ-флоат-extended.html

Как видите, он работает со всеми международными числовыми форматами (us, de, ch и т. Д.) И типами (валюта, проценты, целые, с плавающей точкой и т. Д.) И удаляет все вложенные теги html, а также игнорирует все числа следующий за первым.

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

1 голос
/ 11 октября 2011

Попробуйте вместо этого использовать textExtraction ( demo ):

$('table').tablesorter({
    textExtraction: function(node){
        return node.childNodes[0].nodeValue;
    }
});

Для этого нужно получить значение самого первого узла (в данном случае текстового узла), поэтомуВы не можете обернуть текст в промежуток (или что-то еще), или эта функция не будет работать должным образом.

...