我正在使用 FlexiGrid ,并希望根据变量值更改列颜色。
请告诉我如何实现它?我可以在colModel
中使用任何属性吗?
我尝试了这个,但它不起作用,它抱怨它无法支持 changeColumn
$('#Flexigrid1').changeColumn('FirstName');
var result = false;
(function($) {
function changeColumn(columnName) {
if (!result) {
$('table tr').each(function() {
$(this).find('td').eq(column).css('background-color', 'red');
});
}
}
})(jQuery);
答案 0 :(得分:1)
首先需要使用您的函数扩展jQuery库。例如:
jQuery.fn.extend({
changeColumn: function(columnName) {
但是,您的代码仍然存在其他一些问题。例如,您似乎没有在该命名空间中指定变量result
,而您的选择器$('table tr')
正在查看整个DOM中的所有表行。
我不建议你在最后的尝试中这样做,但是为了教你一点关于jQuery扩展我已经编写了下面的示例代码:
// Create the changeColumnColor function
jQuery.fn.extend({
changeColumnColor: function (color) {
$(this).css('background-color', color);
}
});
$(document).ready(function () {
// Make the table a flexigrid
$('#testTable').flexigrid();
// Call your custom function
$('#testTable td.firstName').changeColumnColor('red');
});
JSFiddle:http://jsfiddle.net/markwylde/Jk6ew/
但是,我仍然会建议您使用任何现有功能扩展实际的flexigrid插件本身,或使用更简单的单线程解决方案:
$('#testTable td.firstName').css('background-color', 'red');
或者,如果您不能提供您的表类并且不知道该列的内容:
$('#testTable td:first-child').changeColumnColor('red');
$('#testTable td:nth-child(3)').changeColumnColor('red');
如果颜色是静态的,另一种选择是更改CSS。
除了下面的评论,您还可以执行以下操作,这将与flexigrid当前标准/命名约定保持一致。
(function($) {
$.fn.flexChangeColumnColor = function (tableHeader) {
// Get the column index we're changing
idx = ($(this).parents(".flexigrid:eq(0)").find("th").filter( function() {
return $(this).text() === tableHeader;
}).index());
// Make the changes
$('td:nth-child(' + (idx+1) + ')', this).css('background-color', 'red');
}
})(jQuery);
$(document).ready(function () {
$('#testTable').flexigrid();
$('#testTable').flexChangeColumnColor('Test Col 3');
});
HTML略有变化以证明所以请查看更新: JSFiddle:http://jsfiddle.net/markwylde/Jk6ew/1/