$(a,this).attr('href') 返回未定义

5

我正在使用ajax从MySQL数据库加载一些数据... 我的问题是获取我想要加载的数据的id,我已经将HREF值设置为id... 所以一个例子是:

`<a href="16" title="View Story: ssasds">ssasds</a>`,

我需要的是 id 值为 16... 我的代码如下:

$('.artefact').click(function()
                {

                var storyId = $('a',this).attr('href');
                console.log(storyId);
                               }

当我检查控制台(firebug)时,它只显示未定义。请尝试帮助解决问题,因为我已经尝试了其他获取数据的方法,但变得混乱。
谢谢。

1
尝试使用 console.log($("a", this)),也可以尝试使用 $(this).find("a") - Raynos
也许你需要使用 $(this).attr('href')。 - Andrei Andrushkevich
<div class="story_preview"> <div class="artefact"><a title="View Story: ssasds"> <img src="http://i4.ytimg.com/vi/VQ-nS9Q-prw/default.jpg" width="130" height="90" alt="ssasds video Preview"> </a> <div class="story_title"><a href="16" title="View Story: ssasds">ssasds</a></div> </div> </div> - nmyster
@Neil Stewart:你有两个链接(a),第一个没有href属性。所以要获取那个href,你可以使用:$('a', this).last().attr('href')。(我认为这是正确的语法) - enoyhs
@Enoyhs 那就是问题所在...谢谢 :) - nmyster
7个回答

8

看起来 .artefact 有两个 a。基于此:

$('.artefact').click(function () {
    var storyId = $('a', this).filter("[href]").attr('href');
    console.log(storyId);
});

编辑

再想一想,这看起来更清晰:

$('.artefact').click(function () {
    var storyId = $(this).find("a[href]").attr('href');
    console.log(storyId);
});

我是个白痴...问题已解决。我没有意识到A) 我之前添加的链接实际上在另一个DIV中,而且B) 在artefact div中的第一个链接没有HREF属性。很抱歉浪费了大家的时间 :( - nmyster
@Neil:你不是在创建一个YouTube播放列表,对吧? - Salman A
不,我有一项大学课程作业要制作一个网络杂志类型的东西...我决定做一个看起来像报纸的网站,我使用PHP和jquery从数据库中加载故事...如果你想查看的话,可以访问newspaper.nmyster.co.uk。我对jquery还很陌生。 - nmyster
我本意是使用 AJAX 和 PHP,但是使用 Jquery 更好。 - nmyster

2

根据您提供的代码,div元素中有2个链接。如果要获取href,(假设该链接总是在div中的最后一个),应使用:

$('.artefact').click(function() {
  var storyId = $('a', this).last().attr('href');
  console.log(storyId);
});

而且正如其他人所说,你也缺少括号。

2
< p> .artefact 是链接吗?如果是,为什么要使用$('a', this)而不是只用$(this)

答: .artefact 不是链接。在这种情况下,使用$('a', this)可以选择在当前元素中的标签,而不是直接选择当前元素。

2
.artefact是一个div,其中包含一张图片和一个锚点标签。 - nmyster
使用@Raynos在你的问题中的评论($(this).find('a') 部分)应该适用于那个组合。 - Thor Jacobsen
当我在控制台中使用("a", this))时,返回[a, a 16]。那么我该如何单独获取17呢?我可以创建一个变量,将("a",this)作为值,然后剪切字符串的最后三个字符,再移除"]"吗? - nmyster
嗯...看看这个jsFiddle:http://jsfiddle.net/5vPhK/ - 是你的情况吗?它运行得非常正常。 - Olegas

1

试试这个:

var storyId = $(this).attr('href');

1

你需要使用 $(this).attr('href')


1

是的,右括号有问题 http://jsfiddle.net/h7HuJ/1/ 我使用了你提供的HTML代码。

你的DIV里有两个锚点,所以你需要指定选择哪一个。我使用了你的类名。


0

@Neil Stewart:看这里 -- http://jsfiddle.net/Chby2/

你没有给链接添加artefact类,而且你的jQuery代码也缺少了闭合括号:);


我尝试了这个链接,它可以正常工作... 我试图将它复制到我的脚本中,但是却不行... 呜呜:(。我知道artefact div被包含在另一个名为story_preview的div中。当页面加载时,使用PHP引入它们... 这会影响到问题吗?我知道如果使用ajax获取数据,需要使用.live(),但我认为在这种情况下不会有问题。 - nmyster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接