2

我在使用 Javascript 获取准确值时遇到问题。

以下是我们在单项上上课时的工作版本。 http://jsfiddle.net/rtnNd/

实际上,当代码块有更多具有相同类的项目时(参见:http: //jsfiddle.net/rtnNd/3),它只选择使用类名的第一个项目。

我的问题是我只想选择使用类名的最后一项。所以我使用了以下代码:

var item = $('.itemAnchor')[6]; 
var href = $($('.hidden_elem')[1].innerHTML.replace('<!--', '').replace('-->', '')).find(item).attr('href'); 

但它不起作用。我真的不知道为什么。

可能包含项目的代码使用相同的类,类可能在 2 项、3 项或第 6 次中使用。这就是为什么,我只想拿起最后一个要提取的项目。

你能解释一下吗,谢谢大家阅读我的问题。

4

1 回答 1

2

“我的问题是我只想选择使用类名的最后一项。”

好的,所以在一般意义上,您将使用以下.last()方法:

var lastItem = $('.itemAnchor').last();

除了 DOM 中没有该类的元素,因为(在你的小提琴中)它们都被注释掉了。这也是您在问题中显示的代码不起作用的原因。第一行:

var item = $('.itemAnchor')[6];

...将item变量设置为undefined. 选择器'.itemAnchor'不返回任何元素,因此$('.itemAnchor')是一个空的 jQuery 对象,并且它在 index 处没有元素6

您需要在使用语句删除开始和结束注释'.itemAnchor'获得的 html 上使用选择器,因此:.replace()

var href = $($('.hidden_elem')[0].innerHTML.replace('<!--','').replace('-->',''))
          .find('.itemAnchor').last().attr('href');

演示:http: //jsfiddle.net/rtnNd/4/

编辑回应评论:

“我们如何才能在最后一个之前拿起 itemElement。”

如果您知道您总是希望倒数第二个项目使用.slice(-2,-1)而不是.last(),如下所示:http: //jsfiddle.net/rtnNd/5/

或者如果你知道你想要任何一个href包含参数的选择器,h=那么你可以使用像'.itemAnchor[href*="h="]'with这样的选择器.find(),在这种情况下你不需要.last()or .slice()

var href = $($('.hidden_elem')[0].innerHTML.replace('<!--','').replace('-->',''))
          .find('.itemAnchor[href*="h="]').attr('href');

演示:http: //jsfiddle.net/rtnNd/6/

请注意,尽管最后一种使用属性包含选择器的方法是拾取在任何地方href都有文本“h =”的元素,因此它适用于您的情况,但也可以拾取或其他。您可以避免这种情况并进行如下测试:hh=somethingmath=easyh=

var href = $($('.hidden_elem')[0].innerHTML.replace('<!--','').replace('-->',''))
    .find('.itemAnchor')
    .filter(function() {
        return /(\?|&)h=/.test(this.href);
    }).attr('href');

演示:http: //jsfiddle.net/rtnNd/7/

于 2012-11-21T03:04:42.393 回答