【问题标题】:Remove a td cell containing specific text from being counted从计数中删除包含特定文本的 td 单元格
【发布时间】:2015-06-14 08:14:51
【问题描述】:
   var donotcountS = 'td.player:contains(S)';  

  $(data).find('td.two_column_layout .report').each(function (index, element) {
  if ($(this).find("td.player:not("+donotcountS+")").length !== +RequiredStarters && $(this).attr("id") !== "InvalidLineup")

我正在尝试计算所有 td.player 单元格,除了那些子跨类包含特定字母的单元格。这就是我所拥有的。我设置了一个 var "donotcountS" ,但我有 2 个问题。

  1. 如何使 var 也使用 true 或 false 声明,以便我可以根据 true 或 false 设置决定是否要计数?

  2. 我怎样才能添加一个名为 donotcountP 的第二个变量,所以我也可以删除带有文本 P 的跨度警告,不计算在内,也可以使用真/假,这样我就可以同时打开或 1 或另一个?

示例 HTML

<table>    
 <caption><span><a></span></caption>    
  <tbody>    
   <tr><th class="player">TEXT</th><th>TEXT</th></tr>    
   <tr><td class="player"><a>TEXT</a></td><td>TEXT</td></tr>    
   <tr><td class="player"><a>TEXT</a></td><td>TEXT</td></tr>    
   <tr><td class="player"><a>TEXT</a></td><td>TEXT</td></tr>   
   <tr><td class="player"><a>TEXT</a>(<span class="warning">P</span>)</td><td>TEXT</td></tr>      
   <tr><td class="player"><a>DO NOT COUNT THIS TD CELL HAVING SPAN WARNING WITH "S" TEXT</a>(<span class="warning">S</span>)</td><td>TEXT</td></tr>    
  </tbody>    
</table>

【问题讨论】:

  • 不要在contains 中使用引号。我在这里做了一个类似jsfiddle.net/epumf3bw的小例子
  • 这行得通,但我需要更具体 ("td.player:not(td.player:contains(S))") ,我需要 td.player 的 span.warning 包含“ S"
  • 上传完整的 html 文件,其中包含您用作选择器的所有类,以便我们更好地理解结构

标签: jquery


【解决方案1】:

如果您只想跳过计算包含特定文本的 td 元素,您可以这样做。

Here is a demo

上面的小提琴使用下面的函数,

$(document).ready(function () {
    var count = 0;
    $("td").each(function () {
       var tdText = $(this).children("span.warning").text();
        if(tdText != "S"){
            count++;
        }
    });
    alert(count);
});

更新 1: 据我了解,您正在动态生成一个表格,一旦生成,您想要计算不包含特定文本的 td。如果这是您想要的,那么您可以在生成表后使用上述函数,如下所示,

$.get('http://%HOST%/%YEAR%/options?L=%LEAGUEID%&O=06', function (data) {
    $(data).find('td.two_column_layout .report').each(function (index, element) {
        if ($(this).find("td.player").length !== +RequiredStarters && $(this).attr("id") !== "InvalidLineup") {
            var target = $("#InvalidLineup").find("tbody");
            $(this).find("span a").each(function () {
                var className = this.className;
                if (clazz[className]) {
                    return
                }
                clazz[className] = true;
                target.append("<tr class='oddtablerow'><td>" + $(this)[0].outerHTML + "</td><td class='lineupalert'><a class='lineuplink' href='http://%HOST%/%YEAR%/options?LEAGUE_ID=%LEAGUEID%&O=02&%FRANCHISEID%'>Submit Valid Lineup</a></td></tr>");
            });
        }
    });

    //insert the function to count specific td here
    var count = 0;
    $("td").each(function () {
        var tdText = $(this).children("span.warning").text();
        if(tdText != "S"){
            count++;
        }
    });
    alert(count);

});

更新 2:

($(this).find("td.player:not(donotcountOUT)").length

donotcountOUT 是一个变量,所以我想它应该写成,

($(this).find("td.player:not("+donotcountOUT+")").length

更新 3:您可以使用多个 :not() 并创建另一个名为 donotCountP 的变量并按如下方式使用它,

var donotcountS = 'td.player:contains(S)';  
var donotcountP = 'td.player:contains(P)';

$(data).find('td.two_column_layout .report').each(function (index, element) {
  if ($(this).find("td.player:not("+donotcountS+"):not("+donotcountS+")").length !== +RequiredStarters && $(this).attr("id") !== "InvalidLineup")

【讨论】:

  • @MShack 我认为这里的一个简单方法是让带有 span 'S' 的 td 附加到新表中,在附加后我们可以从新表中删除那些特定的 td。那怎么样?
  • @MShack 检查我的更新 2 并告诉我它是否解决了问题?
  • Saumil ,现在正在工作。我更新了我需要帮助的原始问题的第二部分的问题。泰!
猜你喜欢
  • 2015-03-05
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多