如何通过在jquery中传递选择器来访问元素?

时间:2010-12-30 08:03:40

标签: jquery selector

我希望通过#chocolate_type获取lqjmje5plsqnl258canal0lmb0!323的内容 作为jQuery的参数。我试过了:

$('#'+id).find('td:first').html();

但它不起作用。这是标记:

<tr bgcolor="#CCCCCC" align="center" id="lqjmje5plsqnl258canal0lmb0!323">
    <td id="chocolate_type">Chocolate Hearts</td>
    <td>2.79</td>
</tr>

提前感谢您的帮助。

7 个答案:

答案 0 :(得分:2)

您的ID包含无效字符。来自w3c:

  

ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(“ - ”),下划线(“ _“),冒号(”:“)和句号(”。“)。

更多信息here

答案 1 :(得分:1)

我怀疑lqjmje5plsqnl258canal0lmb0!323似乎不是id的好价值。 id值不应以数字开头,您应该避免使用特殊字符作为id的值:

$('#lqjmje5plsqnl258canal0lmb0!323 #chocolate_type').html();

您也可以通过id:

直接获取内容
$('#chocolate_type').html();

答案 2 :(得分:1)

您的代码看起来不错,但您无法在ID中使用!字符。我想这可能是你的问题。

您可以使用$('#' + id).find('td:first')$('td:first', '#' + id)$('#' + id + ' td:first')或任何您喜欢的内容。我相信所有这些都有性能比较,我会看看能否找到它。

编辑:这是一篇关于jQuery性能的非常有趣的文章,它说find()比上下文更好:http://jonraasch.com/blog/10-advanced-jquery-performance-tuning-tips-from-paul-irish。所以,你做得对。只需更改ID:)

答案 3 :(得分:0)

尝试类似$('tr[id=' + id + ']').html()之类的内容。这对我有用。这只是样本。在您的情况下,它将成为$('tr[id=' + id + ']').find('td:first').html()

更新:$('#' + id)是您的ID在其他变量中时找到元素的正确方法。但是,在您的情况下,!会导致问题并阻止其发挥作用。

答案 4 :(得分:0)

最好以这种方式编写代码

$('tr#'+id+' td:first').html();

答案 5 :(得分:0)

由于感叹号,选择器失败。如果您使用的是Firefox,请检查您的控制台,您应该会看到如下错误:

  

错误:未捕获的异常:语法错误,无法识别的表达式:!323

如果可以,请从ID中删除感叹号。可以在此处找到ID的允许字符:

  

http://www.electrictoolbox.com/valid-characters-html-id-attribute/

使用$('tr[id='+id+']')也会起作用,但你真的不应该依赖它,因为功能可能因为这是未定义的行为而改变。

答案 6 :(得分:0)

我在构建搜索表单时遇到了同样的问题,因为我使用搜索上下文构建以在每次提交后重建表单。例如,搜索“!#/ \”会生成一些无效的ID。

对于许多简单类型的无效字符(特别是当您自动生成ID并且无法严格控制输入时),请故障转移到JavaScript:

  

的document.getElementById(yourElementId);

工作得很好。