2012-03-14 2 views
0

Я использую jqGrid, и у меня есть время, вставляя новую строку в определенном месте. У меня есть rowId, но когда я делаю вызов, чтобы определить, какую позицию (индекс строки), я получаю null обратно. Я работаю с таблицей:JQGrid: Не удалось получить позицию с rowId

var grid = jQuery("#myTable"); 
grid.jqGrid({ 
    datatype: "local", 
    colNames:['id','Type', 'Name', 'Total','In','Out'], 
    colModel:[ 
      { name: 'id', index: 'id', hidden: true, align:"center"},  
      {name:'type',index:'type', width:10, sortable:true, align:"center"}, 
      {name:'name',index:'name', width:40, sortable:true, align:"center"}, 
      {name:'total',index:'total', width: 10, sortable:false, align:"center"}, 
      {name:'in',index:'in', width:10, sortable:true, align:"center"}, 
      {name:'out',index:'out', width:10, sortable:true, align:"center"} 
    ], 
    width: "600", 
    height: "900" 
    }); 

Но когда я называю:

var dataIds = jQuery("#myTable").getDataIDs(); 

я вернусь следующее:

Level 3.xpusdscdw,Level 3.scoach3,Level 3.xpusdscvs,Level 3.xpusdscah,Level 3.xpusdsctotem,Level 3.xpusdscsc 

Но когда я пытаюсь получить индекс строки, любой из них, результат возвращается null. Это то, что я пытаюсь сделать:

var position = jQuery("#myTable").getInd(rowId,false); 
alert("Position is: "+position+" for "+rowId); 

А потом проверить и посмотреть, что я вернулся (с предупреждением), я вижу это:

Position is: false for Level 03.xpusdscvs 

?

Что дает? getInd должен возвращать индекс строки rowId, когда вы передаете false как второй параметр. Немного помочь?

Благодаря

ответ

0

Я должен начать с замечанием, что ограничения имеет id в HTML. Это не может быть ни одна строка. Прежде всего это должно быть уникальное на странице. Затем он должен следовать требованиям CSS и HTML к идентификаторам. Требования немного отличаются в разных версиях CSS и разных версиях HTML. Например, в спецификации CSS 2.1 вы можете прочитать следующее (см here):

В CSS, идентификаторы (включая имена элементов, классы и идентификаторы в селекторов) могут содержать только символы [A-Za -Z0-9] и ISO 10646 символов U + 00A0 и выше, плюс дефис (-) и подчеркивание (_); они не могут начинаться с цифры, двух дефисов или дефисов, следующих цифре . Идентификаторы также могут содержать экранированные символы и любой символ ISO 10646 в виде числового кода (см. Следующий пункт). Например, идентификатор «B & W?» может быть записано как «B \ & W \?" или "B \ 26 W \ 3F".

В спецификации HTML5 вы можете прочитать (см here)

Атрибут ID задает уникальный идентификатор своего элемента (ID).

Значение должно быть уникальным среди всех идентификаторов в домашнем элементе элемента и должно содержать не менее одного символа. Значение не должно содержать любые пробельные символы.

Кроме того, если вы используете специальные символы, такие как . или других мета-символов внутри в JQuery selectorsyou должны избежать персонажа с два: \\ обратной косой черты. См. here для более подробной информации.

jqGrid использует внутренне метод $.jgrid.jqID, чтобы избежать возможных мета-символы:

var myElement = $('#' + $.jgrid.jqID(someId)); 

Если вы хотите, чтобы сделать его легче жить, я бы рекомендовал вам использовать только символы [A-Za-z], цифры [0-9] или _ или - внутри Ид. Кроме того, я бы рекомендовал, чтобы вы не использовали идентификаторы, которые отличались только в случае. HTML в большинстве случаев нечувствителен к регистру, поэтому лучше использовать либо [a-z], либо [A-Z]. Кроме того, вы должны (но не обязаны) использовать букву в качестве первого символа id. Простое правило может сэкономить ваше время в будущем.

В вашем случае идентификаторы, как xpusdscdw, scoach3, xpusdscvs, xpusdscah, xpusdsctotem, xpusdscscбез префикса"Level 3" совершенны.

Теперь вернитесь к своему основному вопросу. Если у вас есть id из строки в переменной rowid, которая находится внутри HTML-таблицы вы можете использовать следующий код, чтобы получить индекс строки, если строка:

var rowid = "xpusdscdw"; 
var myRow = $("#" + rowid); 
alert("row index: " + myRow[0].rowIndex); 

В коде я использую тот факт, что rowid является id <tr> Элемент <table>. См. Описание rowIndexhere.

Смежные вопросы