проблема оформления текста в Firefox, jQuery и jqgrid

У меня проблема с Firefox, который не отображает стиль «text-decoration: line-through».

Я использую jqGrid для отображения списка лекарств. Если лекарство не действует, его нужно пересечь. В моем событии afterInsertRow я делаю следующее:

$('#' + rowid).css({ 'text-decoration': 'line-through', 'color': 'red' }) 

Он отлично работает для IE и Chrome, но Firefox отображает только красный текст без пересечения линии.

Когда я смотрю на вывод firebug, я вижу, что элемент <tr> имеет определение стиля, включая текстовое оформление, но он просто не отображается так, как мне нужно.


person Alex    schedule 11.06.2010    source источник


Ответы (1)


Если вы измените свой код на

$('#' + ids[1] + " > td").css(
    { 'text-decoration': 'line-through', 'color': 'red' });

если будет работать. Если вы используете rownumbers: true и не хотите, чтобы номер строки был зачеркнутым, вы можете использовать

$('#' + ids[1] + " > td:not(.jqgrid-rownum)").css(
    { 'text-decoration': 'line-through', 'color': 'red' });

Еще одна небольшая рекомендация: используйте gridview: true, чтобы быстрее заполнить jqGrid. В этом режиме вся таблица, содержащаяся, будет заполнена jqGrid в качестве родительского элемента и будет вставлена ​​за одну jQurey.append операцию. Использование события afterInsertRow нарушает правило, потому что каждая строка будет вставлена ​​с операцией jQurey.append, а затем будет вызываться afterInsertRow. Итак, моя рекомендация: используйте gridview: true и не используйте afterInsertRow. Чтобы внести изменения в css, используйте вместо этого loadComplete или gridComplete, например:

jQuery('#list').jqGrid({
    //...
    loadComplete: function() {
        var ids = jQuery('#list').getDataIDs();
        for (var i = 0; i < ids.length; i++) {
            $('#' + ids[i] + ' > td:not(.jqgrid-rownum)').css(
                { 'text-decoration': 'line-through', 'color': 'red' });
        }
    }
    // ...
});
person Oleg    schedule 11.06.2010
comment
спасибо за подробный ответ. Причина, по которой я использую afterInsertRow, заключается в том, что мой набор результатов не такой большой, и он будет содержать не более 20-25 записей, поэтому мне не нужно беспокоиться о скорости загрузки. - person Alex; 13.06.2010