Jquery 如何在td中没有div的情况下获取td的文本

Jquery 如何在td中没有div的情况下获取td的文本,jquery,html-table,Jquery,Html Table,html如下所示: <td class="desc-col"> Good Stuff <div class="options"> <ul> <li> <em>Price</em> $800.00 </li>

html如下所示:

<td class="desc-col">
    Good Stuff
    <div class="options">
        <ul>            
            <li>
                <em>Price</em>
                    $800.00
            </li>                                                                   
        </ul>
    </div>
</td>
<td class="desc-col">
    Awesome Stuff
    <div class="options">
        <ul>            
            <li>
                <em>Price</em>
                    $200.00
            </li>                                                               
        </ul>
    </div>
</td>
我如何简单地得到这个:

["Good Stuff","Awesome Stuff"]
用于获取所有子元素(包括原始DOM文本节点),然后选择第一个:

JSFiddle:

如果需要修剪文本,请使用
jQuery.trim()
$.trim()
作为
“字符串”。并非所有浏览器都支持修剪

您可以使用
A.Wolff
建议的
map()
get()
来简化此过程:

更新:如果内容可能不是第一个元素,您可以按节点类型
筛选()

JSFiddle:

用于获取所有子元素(包括原始DOM文本节点),然后选择第一个:

JSFiddle:

如果需要修剪文本,请使用
jQuery.trim()
$.trim()
作为
“字符串”。并非所有浏览器都支持修剪

您可以使用
A.Wolff
建议的
map()
get()
来简化此过程:

更新:如果内容可能不是第一个元素,您可以按节点类型
筛选()

JSFiddle:

单向:

Array = [];
$("td.desc-col").each(function () {
    Array.push($(this).contents()[0].nodeValue.trim());
});
console.log(Array)

这将遍历单元格,获取每个单元格的内容,获取第一个节点(修剪内容)并将其附加到数组中。

单向:

Array = [];
$("td.desc-col").each(function () {
    Array.push($(this).contents()[0].nodeValue.trim());
});
console.log(Array)

这将遍历单元格,获取每个单元格的内容,获取第一个节点(修剪内容)并将其附加到数组中。

或者试试这个

var text = $('.desc-col').clone().find('.options').remove().end().text();
希望有帮助:)

哎呀,错过了数组部分。这是一个数组:

var textArray = $('.desc-col').clone().append('**').find('.options').remove().end().text().trim().split('**');
-Ted

或者试试这个

var text = $('.desc-col').clone().find('.options').remove().end().text();
希望有帮助:)

哎呀,错过了数组部分。这是一个数组:

var textArray = $('.desc-col').clone().append('**').find('.options').remove().end().text().trim().split('**');

-Ted

这里有一段代码,可以检测
中任何文本的位置

$(“td.desc col”).contents()。每个(函数(索引,元素){
if($.trim(elem.nodeValue)!=''&&elem.nodeType==3)
警报($.trim(元素节点值))
});

一些文本
好东西
  • 价格 $800.00
其他一些好东西
这里有一段代码,可以检测
中任何文本的位置

$(“td.desc col”).contents()。每个(函数(索引,元素){
if($.trim(elem.nodeValue)!=''&&elem.nodeType==3)
警报($.trim(元素节点值))
});

一些文本
好东西
  • 价格 $800.00
其他一些好东西

您可以使用
map()
&
get()
;)@答:是的,请随意添加您自己的答案。没关系,我刚刚更新了您的JSFIDLE:重要部分已经在您的答案中,使用
contents()
您可以使用
map()
&
get()
;)@答:是的,请随意添加您自己的答案。没关系,我刚刚更新了您的JSFIDLE:重要的部分已经在您的答案中了,使用
contents()
为什么您要迭代
每个
来只获得集合的第一个元素???回答不错+1。但是,如果<代码>好的东西在标签的中间,比如<代码> BLAH…BLAHOOD StuffLa< < /代码>如何检测this@asdf_enel_hak-那么你需要一种不同的选择方法,或者基于文本本身,或者基于文本的位置。@TrueBlueAussie-因为我还没有喝咖啡呢!;)@j08691我想应该是这样的:为什么你会对
每个
进行迭代,只得到集合的第一个元素???很好的答案+1。但是,如果<代码>好的东西在标签的中间,比如<代码> BLAH…BLAHOOD StuffLa< < /代码>如何检测this@asdf_enel_hak-那么你需要一种不同的选择方法,或者基于文本本身,或者基于文本的位置。@TrueBlueAussie-因为我还没有喝咖啡呢!;)@j08691我认为它看起来应该是合理的选择,但是
.options
非常具体。问题是“不要别的东西”。使用更广泛的匹配。是的,我现在更喜欢你的答案,因为我正在考虑这个合理的替代方案,但是
。选项
非常具体。问题是“不要别的东西”。使用更广泛的匹配。是的,我更喜欢你的答案,现在我看这个
var textArray = $('.desc-col').clone().append('**').find('.options').remove().end().text().trim().split('**');