attr()不起作用,但target会调用其他命令?
好了,这家伙应该被呼叫的号码形成目标标记rel属性,但它返回未定义:attr()不起作用,但target会调用其他命令?
$(this).closest('tr').prevAll('tr:has(td.country)').first().attr('rel')
有什么奇怪的是,这将调用该标签的文本:
$(this).closest('tr').prevAll('tr:has(td.country)').first().text()
...但是当我使用attr('rel')它是未定义的?这怎么可能?一个例子标记它调用的正常文本()是:
<td colspan="6" class="country" rel="3">United States</td>
$(this).closest('tr').prevAll('tr:has(td.country)').first()
有了这个代码,你是不是访问<td>
,但<tr>
,所以你不能访问它的rel
属性。
让我们除了把它分解:
$(this).closest('tr')
无论$(this)
是,你发现它最接近的父<tr>
$(this).closest('tr').prevAll('tr:has(td.country)')
你得到所有前面的兄弟姐妹到<tr>
有一个<td>
带班country
。
$(this).closest('tr').prevAll('tr:has(td.country)').first()
您选择的<tr>
小号
要获得<td>
前面的列表的第一<tr>
,你需要做的是这样的:
$(this).closest('tr').prevAll('tr:has(td.country)').first().find('td')
编辑:由于@KevinB指出在下面,text()
使你认为它有效的唯一原因是因为text()
返回元素及其所有子元素的文本。所以你仍然会得到<tr>
,但由于该元素本身没有任何文本,所以你只能看到它的子文本<td>
。
对于您所选择的<tr>
而不是<td>
证明,做到以下几点:
alert($(this).closest('tr').prevAll('tr:has(td.country)').first().prop('tagName'));
这将输出“TR”,而不是“TD”。
感谢您的回复。 注意prevAll()调用的“:has(td.country)”部分。我打电话,证明是当我将“attr('rel')”更改为“text()”时,它正确地调用中的文本。 – thecommonthread 2013-04-11 18:25:27
不,您正在查找所有以前的'
@ user1988799.text()获取当前元素*的文本,并且所有的孩子*,.text()不是一个好的测试。 :已经不选择孩子,它只是将当前设置过滤为具有与选择器匹配的元素的元素。 – 2013-04-11 18:37:05
'$(this)'是指什么? – j08691 2013-04-11 18:21:52
tr!= td,您需要导航到具有rel的元素。 – 2013-04-11 18:25:27
'rel'对tds有效吗? – Jai 2013-04-11 18:29:20