Почему эта функция не заменяет класс - PullRequest
1 голос
/ 15 мая 2009

У меня есть функция, которую я тестирую, она должна проверять все заголовки таблиц, чтобы увидеть, есть ли у нее определенный класс, удалить его и заменить другим классом. Я использую это для переключения парсеров метаданных для плагина tableorter. Код, который у меня есть, приведен ниже:

$(function(){
    $("th").each(function(){
        if ($(this).hasClass("{sorter: 'usLongDate'}")) { 
            $(this).removeClass("{sorter: 'usLongDate'}").addClass("{sorter: 'false'}");
            }       
    });
});

$(function() {
    $("table").tablesorter({}); 
});

Я пытаюсь переключить анализатор классов в следующем заголовке на встроенный синтаксический анализатор.

<th class="{sorter: 'usLongDate'}"><a rel = "Header" href="#" title="Sort column in decending order" class="">Date</a></th>

Конечно, это не единственный мой заголовок, я просто тестирую его на этом, я предполагаю, что остальные заголовки не должны быть затронуты, таблица сортировщика все равно должна их сортировать. Но когда я запускаю HTML-файл, ничего не работает. Я что-то упускаю? Спасибо.

ПРИМЕЧАНИЕ. Чтобы избежать путаницы, плагин TableSorter для jQuery может использовать встроенные анализаторы в атрибуте class заголовка таблицы, чтобы определить, как и / или нужно ли сортировать столбец.

ОБНОВЛЕНИЕ: Попробовал предложение Винсента Роберта, к сожалению, оно не работает. Относительно того, могут ли addClass и removeClass справиться с ними. У меня есть оригинальная функция, которая смогла добавить парсер отключения ко всем классам,

$("th[class='']").addClass("{sorter: 'false'}");

это от Паоло Бергантино, и это сработало отлично. Я просто пытаюсь немного его расширить.

Ответы [ 4 ]

2 голосов
/ 15 мая 2009

Я не думаю, что addClass () или removeClass () могут обрабатывать такого рода "классы". Вместо этого вы должны напрямую обращаться к атрибуту "class".

Теперь я не знаком с этим плагином ...

$(function(){
    $("th").each(function(){
        if ($(this).attr("class") == "{sorter: 'usLongDate'}") { 
                $(this).attr("class", "{sorter: 'false'}");
            }           
    });
});

EDIT

Просто просмотрите документацию, и вы можете использовать параметры вместо метода класса:

$('table').tablesorter({ 
    headers: $('th').map(function(i)
    { 
        return { sorter: false /* or whatever you want based on $(this) content */ }; 
    }) 
});

Это должно работать до тех пор, пока вы вызываете его перед любым вызовом tableorter ().

2 голосов
/ 15 мая 2009

Поправь меня, если я ошибаюсь. Но class = "{sorter: 'usLongDate'}" не является допустимым именем класса. Классы - это имена, разделенные пробелами. class = "class1 class2" означает, что элемент имеет два класса class1 и class2, а не один класс. Допустимые имена классов объясняются здесь .

EDIT

Если вы хотите изменить класс, используйте attr вместо add / remove class

$(this).attr('class', 'myNewClass'); 

и удалить использование:

$(this).removeAttr('class');
0 голосов
/ 15 мая 2009

Это, вероятно, то, что вы ищете.

$(document).ready(function() { 
    $("th[class*='usLongDate']").each(function(){
        $(this).removeClass("{sorter: 'usLongDate'}").addClass("{sorter: false}");
    });
    $("table").tablesorter(); 
}); 

Проблема, вероятно, связана с тем, что классы разделены пробелами. Технически, "{sorter:" и "usLongDate '}" - это два разных класса. Я не знаю точно, как TableSorter обрабатывает их, но удаление «{sorter:» и последующее добавление его должно оставить его рядом с «false}».

0 голосов
/ 15 мая 2009

Если вы звоните

$("table").tablesorter({});

Прежде чем пытаться посмотреть на занятия? Я предполагаю, что это плагин, который помещает эти имена классов на место?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...