jquery 选择具有特定属性的 table 行时出现语法错误
Syntax error with jquery selecting table row with a specific attribute
我正在尝试从 table 行中提取数据以便对其进行更新,但我真的很困惑为什么它没有发生。下面是生成的 HTML 的片段。记录 ID 作为属性 "name" 的值保存在第一个数据元素中。在下面的示例中它是 2.
<tr title="Grp2">
<td title="Select box"><input name="2" type="CHECKBOX"></td>
<td title="ID">Dom</td>
<td title="Description">Domestic</td>
<td title="Archive">No</td>
<tr>
这已成功识别出要删除的适当记录。我现在正在尝试对此进行扩展,并获取 "ID" 和 "Description" 元素的值作为更新函数的一部分,但是在尝试 运行代码。
Syntax error, unrecognized expression: tr["title"="Grp14"]
js是:
function show_update_form() {
lvl_prefix = $("#lvl_prefix").val() ;
id = $("#grp_table_id").val() ;
var grp_list = new Array();
var list = "" ; // list of category groups to be deleted
var target = "" ;
var cnt = 0 ;
var confirm_list = "" ;
var msg = "" ;
var sel_ID = "" ;
var sel_Desc = "" ;
var fld_ID = "" ;
var fld_Desc = "" ;
// create json list of groups to update
list = '{"groups": [' ;
target = id + " input:checked";
cnt = 0 ;
$(target).each(function(index){
list += '{"id":' + $(this).attr("name") + '},' ;
grp_list.push($(this).attr("name")) ; // get list so can confirm delete
cnt++ ;
sel_ID = 'tr["title"="Grp' + grp_list[cnt - 1] + '"] ' ; // get current values
sel_Desc = 'tr["title"="Grp' + grp_list[cnt - 1] + '"] ' ;
fld_ID = $('tr["title"="Grp2"] ').filter('td["title"="ID"]').text() ;
// fld_Desc = $(sel_Desc).filter('td["title"="Description"]').text() ;
dlg_grp_update.dialog("open"); // show form and populate with current values
}) ;
list = list.substr(0, (list.length -1)) + ']}' ; // remove last comma and add closing brackets
if (cnt == 0) { // ensure there is something to update
alert( "Please select the Group you wish to update.") ;
return ;
}
} // function show_update_form
Firefox 在线有疝气:
fld_ID = $('tr["title"="Grp2"] ').filter('td["title"="ID"]').text() ;
你可以从它周围的线条中看出,计划是从变量生成这一行,但我试图尽可能地简化它,现在已经对其进行了硬编码,只是为了看看生成中是否有拼写错误过程。
这有点简单明了,但见树不见林的感觉!
想法? select 具有特定属性的 table 行的正确语法是什么?
谢谢,
达里尔
jQuery filter()
未正确使用。
filter
表示取一组元素并过滤掉具有指定选择器的元素。
find
用于使用指定的选择器在元素集中查找元素。
所以试试这个:
fld_ID = $('tr[title="Grp2"] ').find('td[title="ID"]').text();
顺便说一句,使用 title
可能不是最好的方法。在 tr
中添加一个 ID 会更好:
- 用户将鼠标悬停在行上时不会看到标题工具提示
- javascriptid 选择器比属性选择器快得多,因此如果您要处理大量行,使用 id 总体上会更快。
Vijay 是正确的,title
周围的双引号导致选择器出现问题。我已经更新了我的答案。
您需要从表达式的标题中删除双引号。
fld_ID = $('tr[title="Grp2"] td[title="ID"]').text() ;
工作fiddle:http://jsfiddle.net/3y0t8y90/
我正在尝试从 table 行中提取数据以便对其进行更新,但我真的很困惑为什么它没有发生。下面是生成的 HTML 的片段。记录 ID 作为属性 "name" 的值保存在第一个数据元素中。在下面的示例中它是 2.
<tr title="Grp2">
<td title="Select box"><input name="2" type="CHECKBOX"></td>
<td title="ID">Dom</td>
<td title="Description">Domestic</td>
<td title="Archive">No</td>
<tr>
这已成功识别出要删除的适当记录。我现在正在尝试对此进行扩展,并获取 "ID" 和 "Description" 元素的值作为更新函数的一部分,但是在尝试 运行代码。
Syntax error, unrecognized expression: tr["title"="Grp14"]
js是:
function show_update_form() {
lvl_prefix = $("#lvl_prefix").val() ;
id = $("#grp_table_id").val() ;
var grp_list = new Array();
var list = "" ; // list of category groups to be deleted
var target = "" ;
var cnt = 0 ;
var confirm_list = "" ;
var msg = "" ;
var sel_ID = "" ;
var sel_Desc = "" ;
var fld_ID = "" ;
var fld_Desc = "" ;
// create json list of groups to update
list = '{"groups": [' ;
target = id + " input:checked";
cnt = 0 ;
$(target).each(function(index){
list += '{"id":' + $(this).attr("name") + '},' ;
grp_list.push($(this).attr("name")) ; // get list so can confirm delete
cnt++ ;
sel_ID = 'tr["title"="Grp' + grp_list[cnt - 1] + '"] ' ; // get current values
sel_Desc = 'tr["title"="Grp' + grp_list[cnt - 1] + '"] ' ;
fld_ID = $('tr["title"="Grp2"] ').filter('td["title"="ID"]').text() ;
// fld_Desc = $(sel_Desc).filter('td["title"="Description"]').text() ;
dlg_grp_update.dialog("open"); // show form and populate with current values
}) ;
list = list.substr(0, (list.length -1)) + ']}' ; // remove last comma and add closing brackets
if (cnt == 0) { // ensure there is something to update
alert( "Please select the Group you wish to update.") ;
return ;
}
} // function show_update_form
Firefox 在线有疝气:
fld_ID = $('tr["title"="Grp2"] ').filter('td["title"="ID"]').text() ;
你可以从它周围的线条中看出,计划是从变量生成这一行,但我试图尽可能地简化它,现在已经对其进行了硬编码,只是为了看看生成中是否有拼写错误过程。
这有点简单明了,但见树不见林的感觉!
想法? select 具有特定属性的 table 行的正确语法是什么?
谢谢, 达里尔
jQuery filter()
未正确使用。
filter
表示取一组元素并过滤掉具有指定选择器的元素。
find
用于使用指定的选择器在元素集中查找元素。
所以试试这个:
fld_ID = $('tr[title="Grp2"] ').find('td[title="ID"]').text();
顺便说一句,使用 title
可能不是最好的方法。在 tr
中添加一个 ID 会更好:
- 用户将鼠标悬停在行上时不会看到标题工具提示
- javascriptid 选择器比属性选择器快得多,因此如果您要处理大量行,使用 id 总体上会更快。
Vijay 是正确的,title
周围的双引号导致选择器出现问题。我已经更新了我的答案。
您需要从表达式的标题中删除双引号。
fld_ID = $('tr[title="Grp2"] td[title="ID"]').text() ;
工作fiddle:http://jsfiddle.net/3y0t8y90/