Jquery 使用:contains查找特定的td元素

Jquery 使用:contains查找特定的td元素,jquery,Jquery,我有以下呈现的html: <table width="420" cellspacing="0" cellpadding="3" border="0"> <tbody> <tr><td>....</td> </tr> <tr> <td>Total Amount Due:</td> <td>$168.88</td> </tr> 我曾尝试在Firebug的命

我有以下呈现的html:

<table width="420" cellspacing="0" cellpadding="3" border="0">
<tbody>
<tr><td>....</td>
</tr>
<tr>
<td>Total Amount Due:</td>
<td>$168.88</td>
</tr>
我曾尝试在Firebug的命令行中稍微修改一下语法,但当我这样做时,我总是在第一行收到一个错误。对于这样的代码,直到我得到TypeError:$(tdElement)的第二行为null时,我才收到错误

此外,不确定这是否会影响任何内容,但该表实际上位于其他两个表中

我得到一个TypeError:$(tdElement)为空

即使它不匹配任何内容,jQuery也会返回一个有效的jQuery对象(不包含匹配的元素),而不是
null
,因此听起来像:

  • 您没有加载jQuery。检查JavaScript控制台以查看是否存在加载错误,并解决发现的任何错误

  • 或者您确实加载了它,但是您还加载了另一个库,如Prototype或MooTools,它窃取了
    $
    符号。如果是,您有三个选择(至少):

  • 尝试停止使用其他库,并将其从页面中删除

  • 使用
    jQuery
    而不是
    $
    您想要使用jQuery的任何地方

  • 或者将jQuery代码放在一个函数中,您可以使用该函数对
    $
    符号进行阴影处理,如下所示:

    // If you have another library loaded, out here $ may not === jQuery
    (function($) {
        // Here, your code can happily assume $ === jQuery...
    })(jQuery);
    
一旦你解决了这个问题:

如果页面大小不一样,我强烈建议不要使用
:contains
。相反,如果该元素在页面上是唯一的,则使用
id
并使用
$(“#theid”)
查找它。如果没有,请使用一个类,并使用
$(“.theclass”).find(“:contains('Total Amount')”)
查找它

最后:你正在使用

var tdElement = $("td:contains('Total Amount Due:')");
而且

alert($(tdElement).text());
无需再次调用
$
,只需使用第一个jQuery实例:

alert(tdElement.text());
我得到一个TypeError:$(tdElement)为空

即使它不匹配任何内容,jQuery也会返回一个有效的jQuery对象(不包含匹配的元素),而不是
null
,因此听起来像:

  • 您没有加载jQuery。检查JavaScript控制台以查看是否存在加载错误,并解决发现的任何错误

  • 或者您确实加载了它,但是您还加载了另一个库,如Prototype或MooTools,它窃取了
    $
    符号。如果是,您有三个选择(至少):

  • 尝试停止使用其他库,并将其从页面中删除

  • 使用
    jQuery
    而不是
    $
    您想要使用jQuery的任何地方

  • 或者将jQuery代码放在一个函数中,您可以使用该函数对
    $
    符号进行阴影处理,如下所示:

    // If you have another library loaded, out here $ may not === jQuery
    (function($) {
        // Here, your code can happily assume $ === jQuery...
    })(jQuery);
    
一旦你解决了这个问题:

如果页面大小不一样,我强烈建议不要使用
:contains
。相反,如果该元素在页面上是唯一的,则使用
id
并使用
$(“#theid”)
查找它。如果没有,请使用一个类,并使用
$(“.theclass”).find(“:contains('Total Amount')”)
查找它

最后:你正在使用

var tdElement = $("td:contains('Total Amount Due:')");
而且

alert($(tdElement).text());
无需再次调用
$
,只需使用第一个jQuery实例:

alert(tdElement.text());


这里有一个稍微不同的配置,但我认为它可能适合您

<table width="420" cellspacing="0" cellpadding="3" border="0">
<tbody>
<tr><td>....</td>
</tr>
<tr>
<td>Total Amount Due:</td>
<td id="amountDue">$168.88</td>
</tr>
</tbody>
</table>

这里有一个稍微不同的配置,但我认为它可能适合您

<table width="420" cellspacing="0" cellpadding="3" border="0">
<tbody>
<tr><td>....</td>
</tr>
<tr>
<td>Total Amount Due:</td>
<td id="amountDue">$168.88</td>
</tr>
</tbody>
</table>

有没有理由不尝试做以下事情

<table width="420" cellspacing="0" cellpadding="3" border="0">
<tbody>
<tr><td>....</td>
</tr>
<tr>
<td>Total Amount Due:</td>
<td id="total-amount-due">$168.88</td>
</tr>
var ttl = $('#total-amount-due').text();

....
应付总额:
$168.88
var ttl=$(“#到期总金额”).text();

根据您发布的内容,这似乎是最简单的解决方案。

是否有理由不尝试并执行以下操作

<table width="420" cellspacing="0" cellpadding="3" border="0">
<tbody>
<tr><td>....</td>
</tr>
<tr>
<td>Total Amount Due:</td>
<td id="total-amount-due">$168.88</td>
</tr>
var ttl = $('#total-amount-due').text();

....
应付总额:
$168.88
var ttl=$(“#到期总金额”).text();

根据你发布的内容,这似乎是最简单的解决方案。

嘿,伙计,给td一个包含的金额,例如每堂课320.00美元,或者如果你不想给一堂课,你需要一个psuedo

您尚未指定要使用其他值更改的事件的其他事项,例如,单击按钮更改值我已使用“文档准备”功能完成了更改,您可以向其添加任何事件以及金额:)

案例1)如果你能上课

$(document).ready( function() {
    $(".amount").text("any value you want");
});

<table width="420" cellspacing="0" cellpadding="3" border="0">
    <tbody>
        <tr>
            <td>....</td>
        </tr>
        <tr>
            <td>Total Amount Due:</td>
            <td class="amount">$168.88</td>
        </tr>
案例3)如果表的
TR
为第二、第三、第四。。。在这种情况下,它是第三个

$(document).ready( function() {
    $("table tbody tr:nth-child(3) td:last").text("any value you want");
});

<table width="420" cellspacing="0" cellpadding="3" border="0">
    <tbody>
        <tr><td>....</td></tr>
        <tr>
            <td>Total Amount Due:</td>
            <td>$168.88</td>
        </tr>
$(文档).ready(函数(){
$(“表tbody tr:nth child(3)td:last”).text(“您想要的任何值”);
});
....
应付总额:
$168.88

嘿,伙计,给那个td一节课,比如320.00美元一节课,或者如果你不想给一节课,你需要一个psuedo

您尚未指定要使用其他值更改的事件的其他事项,例如,单击按钮更改值我已使用“文档准备”功能完成了更改,您可以向其添加任何事件以及金额:)

案例1)如果你能上课

$(document).ready( function() {
    $(".amount").text("any value you want");
});

<table width="420" cellspacing="0" cellpadding="3" border="0">
    <tbody>
        <tr>
            <td>....</td>
        </tr>
        <tr>
            <td>Total Amount Due:</td>
            <td class="amount">$168.88</td>
        </tr>
案例3)如果表的
TR
为第二、第三、第四。。。在这种情况下,它是第三个

$(document).ready( function() {
    $("table tbody tr:nth-child(3) td:last").text("any value you want");
});

<table width="420" cellspacing="0" cellpadding="3" border="0">
    <tbody>
        <tr><td>....</td></tr>
        <tr>
            <td>Total Amount Due:</td>
            <td>$168.88</td>
        </tr>
$(文档).ready(函数(){
$(“表tbody tr:nth child(3)td:last”).text(“您想要的任何值”);
});
....
应付总额:
$168.88

为重要元素提供适当的类和ID,然后查找它们。您不能依赖内部文本,如果稍后进入
i18n
,会怎么样?此外,您的问题在于其他地方,因为您的标记/代码是有效的:为重要元素提供适当的类和ID,然后查找它们。您不能依赖内部文本,如果稍后进入
i18n
,该怎么办?此外,您的问题还存在于其他地方,因为您的标记/代码可以工作:在这个答案中添加一个性能免责声明会很有意思。@adeneo:jQuery已经提供了一个支持
:contains
的选择器引擎,无需重写功能。@T.J.Crowder-我的更好!@阿迪内奥:嗯但是这个答案忽略了一点,即jQuery不会返回
null
,而不管选择什么