var listname=$(this).parents(".x-grid3-row-table").children(".x-grid3-cell-inner.x-grid3-col-1").text();
console.log(listname);
console.log返回以下内容:
(an empty string)
你可以帮我解释为什么listname为空?你能告诉我如何将listname作为参数传递给Ext.Ajax.request中的服务器端方法吗?
这是来自我生成的页面的html代码:
<table class="x-grid3-row-table>
<tr>
<td class="x-grid3-col x-grid3-cell x-grid3-td-1 " tabindex="0" style="text-align: left;width: 265px;">
<div class="x-grid3-cell-inner x-grid3-col-1" unselectable="on">foo_bar@domain.de</div>
</td>
<td class="x-grid3-col x-grid3-cell x-grid3-td-2 x-grid3-cell-last " tabindex="0" style="width: 59px;">
<div class="x-grid3-cell-inner x-grid3-col-2" unselectable="on">
<span class="free">free</span>
</div>
</td>
</tr>
<tr class="x-grid3-row-body">
<!-- 7 Elements Markup down, who all act wrapping for the following -->
<div class="details">
<!-- some other markup elements, who also contain data, but are not further interesting-->
<td class="data"> foo bar detail data </td><!-- not of interest-->
<td class="edit"><input value="edit" onclick="see function on top" type="button" /> </td>
</div>
</tr>
</table>
目标是提取: foo_bar@domain.de 并将其作为参数传递给server-method。该方法应该是一个窗口,但这是一个不同的故事。
onclick调用来自展开的网格面板主体,该主体包含在带有给定html代码的table('.x-grid3-row-table')
中。
答案 0 :(得分:2)
您的子选择器中的类名之间有一个空格,但是您的标记表明两个类名都具有相同的元素。
要选择具有多个类名的元素,选择器的类名之间不能有.classname1.className2
的空格。
var listname=$(this).parents(".x-grid3-row-table").children(".x-grid3-cell-inner.x-grid3-col-1").text(); console.log(listname);
应该有用。
进一步澄清:
如果您在类名之间有空格,则意味着您尝试在.x-grid3-col-1
类中选择具有.x-grid3-cell-inner
类的元素。哪个是父母子女关系。
修改强>
如果您的按钮位于下一行,则可以使用JQuery的.prev()选择器,并将tr
用作父选择器而不是表。
listname=$(this).parents("tr").prev().children(".x-grid3-cell-inner.x-grid3-col-1").text();
或者如果它在同一行,则只需
listname=$(this).parents("tr").children(".x-grid3-cell-inner.x-grid3-col-1").text();
答案 1 :(得分:0)
可能有一种更简洁的方法可以做到这一点,但我想出了这个按钮点击处理程序,它假设你要查找的文本()是从按钮向上的一个表格。
var $rows,button=this,i;
$rows=$(".x-grid3-row-table tr");
for(i=0;i<$rows.length;i++){
// get the button of that row
// not sure how to as your button is not
// in a table row with the code you posted
if($rows[i].getElementsByTagName("input")[0]===
button){
break;
}
}
// I assume the button is in a row before the button
console.log($($rows[i-1])
.find(".x-grid3-cell-inner.x-grid3-col-1")
.text()