代码拉取完成,页面将自动刷新
/** require JQATTExtend.js */
/**
*Jquery Ajax Tree table
*作者:郑桂良
*/
function JQATT(selectcss,args){
var JQ = jQuery || jquery;
var mainTable = JQ(selectcss);
var theadTable = mainTable.find(".headTable,thead");
var tbodyTable = mainTable.find(".bodyTable,tbody");
var _JQATT = this;
args = args || {};
//args.autoInitRenderAllCell = args.autoInitRenderAllCell || true;
args.onCellChange = args.onCellChange || false;
var columnDefs = [];
function getColumnDef(colindex) {
return columnDefs[colindex] || {};
}
function getRowValues($tr) {
$tr = JQ($tr); //保证jquery对象化
var vs = {};
$tr.find("td").each(function () {
var td = JQ(this);
var index = td.index();
var col = getColumnDef(index);
vs[col.fieldName] = getCellValue(td);
});
$tr.find("[jqatt='hiddenField']").each(function () {
var _this = JQ(this);
vs[_this.attr("name")] = _this.val();
});
return vs;
}
//创建空白行,实际使用中应该很少使用
//$tr : 插入到这一行的下面,为undefined的话,插入到最后
function createNewEmptyRow($tr)
{
var html = [];
html.push("<tr>");
var l = columnDefs.length;
for(var i=0;i<l;i++){
html.push("<td></td>");
}
html.push("</tr>");
var newrow = JQ(html.join("\n"));
if ($tr === undefined) {
mainTable.find("tbody").append(newrow);
} else {
$tr.after(newrow);
}
newrow.find("td").click(function () { startCellEdit(this); });
return newrow;
}
//根据现有模板创建新行
//templateCssselect : 行模板的jquery 选择器
//dataObject : 渲染的数据
//$tr : 插入到这一行的下面,为undefined的话,插入到最后
function createNewRowByTemplate(templateCssselect, dataObject,$tr)
{
var html = JQ(templateCssselect).html();
html = JQATTExtend.getRenderFunction("default")(html,"",dataObject);
var newrow = JQ(html);
if ($tr === undefined) {
mainTable.find("tbody").append(newrow);
} else {
$tr.after(newrow);
}
newrow.find("td").click(function () { startCellEdit(this); });
return newrow;
}
//根据表头定义的filedRenderString创建新行
//dataObject : 渲染的数据
//$tr : 插入到这一行的下面,为undefined的话,插入到最后
function createNewRowByColumnDef(dataObject,$tr)
{
var html = [];
html.push("<tr>");
var l = columnDefs.length;
for (var i = 0; i < l; i++) {
var tdInnerText = "";
var col = columnDefs[i];
if (col.needRender) {
tdInnerText = col.filedRenderFn(col.filedRenderString, dataObject[col.fieldName] , dataObject, col, _JQATT);
} else {
tdInnerText = dataObject[col.fieldName];
}
var columnClass = col.columnClass ? " class='" + col.columnClass +"'" : "";
html.push("<td" + columnClass + ">" + tdInnerText + "</td>");
}
html.push("</tr>");
var newrow = JQ(html.join("\n"));
if ($tr === undefined) {
mainTable.find("tbody").append(newrow);
} else {
$tr.after(newrow);
}
//如果是第一条新增行, 那么需要初始对齐列宽
if (newrow.index() == 0) {
alignmentAllColumnWidth();
}
//绑定点击事件
newrow.find("td").click(function () { startCellEdit(this); });
return newrow;
}
function getCellValue(td) {
td = JQ(td);
var col = getColumnDef(td.index());
if (td.attr("editing") == "true") {
//编辑状态下 优先取 编辑控件的值
var v = td.find("[name='" + col.fieldName + "']").val() //优先级1 name == fieldName的
|| td.find(":input").val() //优先级2 表单控件
|| td.text() //优先级3 显示值
|| td.find("img,image").attr("src"); //优先级4 图片地址
return v === undefined ? "" :v ; //undefined 和 false 转换成空字符串
} else {
//非编辑状态下 优先取 td的绑定data()值
var v = td.data("fieldValue")
|| td.find("[name='" + col.fieldName + "']").val() //优先级1 name == fieldName的
|| td.find(":input").val() //优先级2 表单控件
|| td.text() //优先级3 显示值
|| td.find("img,image").attr("src") //优先级4 图片地址
return v === undefined ? "" :v ; //undefined 转换成空字符串
}
}
function setCellValue($td, Value, Col, $tr,fireEvent) {
var RowValues = getRowValues($tr);
Value = Value === undefined ? "" : Value;
if (typeof (Col.filedRenderFn) == "function") {
var editedhtml = Col.filedRenderFn(Col.filedRenderString, Value, RowValues, Col, _JQATT);
$td.html(editedhtml === undefined ? "" : editedhtml); //这里如果Value===undefined 那么会导致,当前这句话失效.
$td.data("fieldValue", Value); //这里如果Value===undefined 那么会导致,当前这句话失效.
} else {
$td.html(Value); //这里如果Value===undefined 那么会导致,当前这句话失效.
$td.data("fieldValue", Value); //这里如果Value===undefined 那么会导致,当前这句话失效.
}
if(fireEvent !== false){
if (typeof(args.onCellChange) == "function") {
args.onCellChange($td, Value, Col, $tr, $td.data("oldFieldValue"));
}
}
}
//**初始化列定义内容,方便后面高速调用 start*******/
function initColumnsDefined() {
mainTable.find("thead th").each(function () {
var i = JQ(this).index();
var col = {};
//取所有带属性jqatt 的属性名 和属性值
JQ(this).find("[jqatt]").each(function () {
var _this = JQ(this);
col[_this.attr("jqatt")] = _this.html();
_this.remove(); //已经使用完成 无用的元素直接清除掉.
});
col.fieldName = col.fieldName || ""; // undefined => ""
col.editCtrId = col.editCtrId || ""; // undefined => ""
col.filedRenderString = col.filedRenderString || ""; // undefined => ""
col.title = col.title || ""; // undefined => ""
col.filedRenderFn = col.filedRenderFn + ""; //undefined => "undefined" 下面再转回函数
col.editControlHTML = col.editControlHTML || "";
//渲染方法 转字符串
//根据是否有filedRenderString和渲染方法判断是否需要自动渲染数据
col.needRender = col.filedRenderString != "" || col.filedRenderFn != "undefined";
//指向同名函数本身,
col.filedRenderFn = JQATTExtend.getRenderFunction(col.filedRenderFn);
columnDefs[i] = col;
});
}
//**初始化列定义内容,方便后面高速调用 end*******/
function alignmentAllColumnWidth() {
var t = mainTable.find("thead tr:last th");
var d = mainTable.find("tbody tr:first td");
for (var i = 0; i < t.length; i++) {
JQ(d[i]).css("width", JQ(t[i]).width() + "px");
}
}
//渲染表格数据 一列一列的渲染的,不是一行一行的
function renderAllCell() {
mainTable.find("thead th").each(function () {
var thColumnIndex = JQ(this).index();
var col = getColumnDef(thColumnIndex);
if (col.columnClass) {
tbodyTable.find("tr td:nth-child(" + (thColumnIndex*1+1) + ")").addClass(col.columnClass);
}
//不需要渲染那么就直接退出
if (col.needRender) {
tbodyTable.find("tbody tr").each(function () {
var $tr = JQ(this);
var $td = $tr.find("td:eq(" + thColumnIndex + ")");
var v = getCellValue($td);
setCellValue($td, v, col, $tr,false);
});
}
});
}
//渲染一行的数据
function renderRow($tr) {
mainTable.find("thead th").each(function () {
var col = getColumnDef(JQ(this).index());
//没有渲染格式就使用默认的
if (col.filedRenderString == "") { return; }
var $tr = JQ($tr);
var $td = $tr.find("td:eq(" + thColumnIndex + ")");
if (col.columnClass) {
$td.addClass(col.columnClass);
}
var v = getCellValue($td);
setCellValue($td, v, col, $tr,false);
});
}
//结束所有单元格的编辑
function endAllCellEdit() {
var allValid = true;
mainTable.find("tbody td[editing]").each(function () {
var v = endCellEdit(this);
if (v == false) {
allValid = false;
}
});
return allValid;
}
//结束对但单元格的编辑.
function endCellEdit(td) {
var $td = JQ(td) ;
var col = getColumnDef($td.index());
var value = getCellValue($td);
if (col.validConstraints && validate) {
var p={};
p[col.fieldName] = value;
var v = validate(p, JQATTExtend.getValidConstraints(col.validConstraints));
//v[col.fieldName] 验证当前字段出错的话,能够通过v[col.fieldName][0] 取得错误的信息
if (v[col.fieldName] != undefined) {
$td.addClass("validError").attr("title", v[col.fieldName][0]);
return false;
}
$td.removeClass("validError");
}
setCellValue($td, value, col, $td.closest("tr"));
$td.removeAttr("editing");
mainTable.trigger('JQATT:EndCellEdit', [_JQATT, mainTable, $td, col, value, args]);
return true;
}
//开始 单元格编辑
function startCellEdit(td) {
var $td = JQ(this);
if (typeof (td) == "object") {
$td = JQ(td);
}
var col = getColumnDef($td.index());
//如果当前单元格正在被编辑 那么不要继续执行.
if ($td.attr("editing") == "true") { return true; }
//收起原先编辑的控件
var valided = endAllCellEdit();
if (valided == false) {
return;
}
//开始编辑
var v = getCellValue($td);
//如果没有编辑方法,那么默认为当前td不需要编辑
//没有编辑控件代码,只有编辑控件的ID,那么取ID控件的html
if (col.editControlHTML == "" && col.editCtrId != "") {
var tempdiv = JQ("<div></div>"); //只有这样将控件clone一份 才能取到控件本身的html()
col.editControlHTML = tempdiv.append(JQ("#" + col.editCtrId).clone()).html();
tempdiv.remove();
tempdiv = null;
}
if (col.editControlHTML == "") { return true; }
$td.data("oldFieldValue", v); //保存老的值
$td.html(col.editControlHTML);
$td.find("[name='" + col.fieldName + "']").val(v).focus();
$td.attr("editing", "true");
mainTable.trigger('JQATT:StartCellEdit', [_JQATT, mainTable, $td, col, args]);
}
//加载插件
function loadPlugins() {
for (var p in JQATTExtend.Plugins) {
JQATTExtend.Plugins[p](_JQATT, mainTable, theadTable, tbodyTable, args);
}
}
///**记录有那些行被选择**/
//function recordRowSelected() {
// /**记录当前选择了哪一行start**/
// //多选行
// tbodyTable.find("td").on("click", function () {
// var $tr = JQ(this).closest("tr");
// if ($tr.is(".SelectedRow")) {
// $tr.removeClass("SelectedRow");
// _JQATT.SelectedRows = null;
// } else {
// $tr.addClass("SelectedRow");
// _JQATT.SelectedRows = $tr;
// }
// if (args.MutilSelectedRow) {
// _JQATT.SelectedRows = mainTable.find(".SelectedRow");
// }
// });
// /**记录当前选择了哪一行end **/
//}
/**对齐数据行和表头行,使数据行刚好在表头的下面不被表头遮盖.*/
function alignDataAndHead() {
//3.加载表头固定属性
//因表头是绝对定位,会浮动遮盖住一部分数据.所以用 margin-top让数据下移一部分.
tbodyTable.css("marginTop", theadTable.height() + "px");
var container = mainTable.find(".rc-handle-container"); //调整列宽的容器也要固定.
container.css("position", "absolute");
//主滚动条滚动时,表头也跟着滚动.
mainTable.scroll(function (e) {
var top = mainTable.scrollTop();
var left = mainTable.scrollLeft();
container.css({
'top': top + 'px' //调整列宽的容器也要保持位置不变,
});
theadTable.css({
'top': top + 'px' //保持位置不变,
});
});
}
_JQATT.SelectedRows = [];
_JQATT.alignmentAllColumnWidth = alignmentAllColumnWidth;
_JQATT.renderAllCell = renderAllCell;
_JQATT.renderRow = renderRow;
_JQATT.startCellEdit = startCellEdit;
_JQATT.endCellEdit = endCellEdit;
_JQATT.endAllCellEdit = endAllCellEdit;
_JQATT.getColumnDef = getColumnDef;
_JQATT.getRowValues = getRowValues; //getRowValues($tr)
_JQATT.columnDefs = columnDefs;
_JQATT.getCellValue = getCellValue;
_JQATT.setCellValue = setCellValue;
_JQATT.createNewEmptyRow = createNewEmptyRow;
_JQATT.createNewRowByTemplate = createNewRowByTemplate;
_JQATT.createNewRowByColumnDef = createNewRowByColumnDef;
function init() {
loadPlugins();
initColumnsDefined();
if (theadTable.attr("id") === undefined) {
theadTable.attr("id", mainTable.attr("id") + "_headtable");
}
if (tbodyTable.attr("id") === undefined) {
tbodyTable.attr("id", mainTable.attr("id") + "_bodyTable");
}
//0.渲染所有单元格
renderAllCell();
//1.允许编辑
tbodyTable.find("td").click(function () { startCellEdit(this); });
//2.如果加载了,调整列宽的插件.
if (theadTable.resizableColumns) {
theadTable.resizableColumns({ //使用户可以调整列宽
store: window.store
});
theadTable.on("column:resize:stop", function () {
alignDataAndHead();
alignmentAllColumnWidth();
});
}
alignDataAndHead();
//4.最后对齐列宽
alignmentAllColumnWidth();//同步一遍,因为列宽会根据用户的存储宽度加载 ,必须在加载完 列调整模块 之后执行
mainTable.trigger('JQATT:InitEnd', [_JQATT, mainTable, theadTable, tbodyTable, args]);
}
init();
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。