ऐसा लगता है आपके प्रश्न पर सही जवाब क्या विधि rows
जो आप लागू करना चाहते हैं क्या करना चाहिए से थोड़ी निर्भर करता है। मैं थोड़ा अनुमान लगाने की कोशिश करता हूं और कार्यान्वयन देता हूं जो आपके प्रश्न की मेरी समझ से मेल खाता है।
सभी jqGrid पहले jQuery प्लगइन है और यदि आप उदाहरण
$(myselector).jqGrid('setSelection',rowid);
के लिए लिखना यह हो सकता है कि $(myselector)
का चयन करता है अधिक के रूप में एक डोम तत्व। उदाहरण
$('table').jqGrid('setSelection',rowid);
के लिए पृष्ठ पर सभी <table>
तत्वों पर विधि 'setSelection' jqGrid फोन की कोशिश करेंगे। तो this
तत्व डीओएम तत्वों की सरणी में तत्व (यह <table>
डीओएम तत्व होना चाहिए) और न केवल एक तत्व होना चाहिए।
एक और सामान्य टिप्पणी। वहाँ jQuery तरीकों की तरह
$("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid');
श्रृंखलित किया जा सकता है मामला 'setGridParam' कुछ करना और this
लौट श्रृंखलन का समर्थन करने के लिए कर रहे हैं। अन्य विधियां चेनिंग का समर्थन नहीं करती हैं और वापस लौटने की विधि को वापस करने की आवश्यकता होती है। उदाहरण के लिए getDataIDs
आईड्स की सरणी देता है और कोई अन्य jQuery विधियों के साथ getDataIDs
चेन नहीं कर सकता है।
अब मैं आपके प्रश्न पर वापस लौट आया हूं। मैं बेहतर तरीके से नई विधि getRowsById
नाम दूंगा। विधि डीओएम तत्वों के साथ सरणी लौटाएगी जो <tr>
(तालिका पंक्ति) का प्रतिनिधित्व करती है। पैरामीटर के रूप में विधि rowid
होगी। तो एक तरह से नई विधि के साथ jqGrid विस्तार कर सकते हैं:
सब मैं उदाहरण विधि
$.jgrid.extend
परिभाषित
here में उपयोग की
$.jgrid.extend({
getRowsById: function (rowid){
var totalRows = [];
// enum all elements of the jQuery object
this.each(function(){
if (!this.grid) { return; }
// this is the DOM of the table
// we
var tr = this.rows.namedItem(rowid);
if (tr !== null) { // or if (tr !== null)
totalRows.push(tr);
}
});
return totalRows;
}
});
पहले। यह ज्यादातर $.extend($.fn.jqGrid,methods);
करता है। फिर, क्योंकि जिस विधि को हम कार्यान्वित करते हैं उसे जंजीर नहीं बनाया जा सकता है, हम totalRows
वैरिएबल को परिभाषित करते हैं जिसे विधि के परिणामस्वरूप बाद में वापस कर दिया जाएगा। अब हमें उपरोक्त उदाहरणों में this
($(myselector)
या $('table')
के तत्वों की तरह) से सभी ऑब्जेक्ट्स का आकलन करना होगा। हम this.each(function(){/*do here*/});
निर्माण के संबंध में ऐसा करते हैं। फिर पाश के अंदर हम निम्न उपाय अपनाते हैं
if (!this.grid) { return; }
बयान हम परीक्षण वर्तमान DOM एलीमेंट grid
संपत्ति है या नहीं के साथ। यह table
तत्व की मानक संपत्ति नहीं है, लेकिन jqGrid संपत्ति के साथ table
के DOM तत्वों का विस्तार करता है। परीक्षण के साथ हम उदाहरण के लिए अन्य table
तत्वों को छोड़ सकते हैं जहां jqGrid
लागू नहीं हैं (जो एक jqGrid नहीं हैं)।फिर मैं इस तथ्य का उपयोग करता हूं कि this
table
तत्व का DOM होना चाहिए जिसमें rows
संपत्ति है (here, और here देखें) और मैं इसकी namedItem
विधि का उपयोग करता हूं। मूल कार्यान्वित विधि $ ("#" + पंक्तिबद्ध) के रूप में बेहतर काम करती है, लेकिन वही करें। आखिरकार हम सरणी totalRows
वापस कर देते हैं। यदि पंक्ति आईडी के साथ पंक्ति ग्रिड में नहीं है और यदि यह मौजूद है तो इसमें कोई तत्व नहीं होगा। वर्तमान jQuery चयनकर्ता एक ग्रिड के रूप में और अधिक का चयन करें और अगर हम एक त्रुटि थी और शामिल में दोनों एक ही आईडी की पंक्तियां ग्रिड लौटे सरणी के रूप में 1. अधिक से अधिक लंबाई तो हम यह इतना
var grid = $("#list");
var tr = grid.jqGrid('getRowById','1111');
alert(tr.length);
उपयोग कर सकते हैं पर अंत में मैं यह उल्लेख करना चाहता हूं कि विधि $.jgrid.extend
न केवल सहायक हो सकती है यदि आप नई jqGrid विधि को पेश करना चाहते हैं। कभी-कभी पहले से ही कुछ jqGrid विधि हैं, लेकिन यह बिल्कुल ठीक नहीं है कि आपको की आवश्यकता है। तो आप चाहते हैं कि संशोधित विधि मूल jqGrid विधि के अंत में शुरुआत या कुछ पर कुछ करे। मामले में हम निम्नलिखित
var oldEditCell = $.fn.jqGrid.editCell;
$.jgrid.extend({
editCell: function (iRow,iCol, ed){
var ret;
// do someting before
ret = oldEditCell.call (this, iRow, iCol, ed);
// do something after
return ret; // return original or modified results
}
});
उदाहरण हम ऊपर लिख jqGrid से ही कहा जाएगा के साथ मूल editCell
विधि में करते हैं और कॉल के बाद कुछ के पहले कुछ कर सकते हैं।