attr()不起作用,但target会调用其他命令?

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> 
+0

'$(this)'是指什么? – j08691 2013-04-11 18:21:52

+0

tr!= td,您需要导航到具有rel的元素。 – 2013-04-11 18:25:27

+0

'rel'对tds有效吗? – Jai 2013-04-11 18:29:20

$(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”。

+0

感谢您的回复。 注意prevAll()调用的“:has(td.country)”部分。我打电话​​,证明是当我将“attr('rel')”更改为“text()”时,它正确地调用​​中的文本。 – thecommonthread 2013-04-11 18:25:27

+0

不,您正在查找所有以前的'

',它们的'​​'级别为'country'。这并不意味着你得到这些'​​'' – Steve 2013-04-11 18:27:01
+1

@ user1988799.text()获取当前元素*的文本,并且所有的孩子*,.text()不是一个好的测试。 :已经不选择孩子,它只是将当前设置过滤为具有与选择器匹配的元素的元素。 – 2013-04-11 18:37:05