Jquery .each():查找包含输入的元素

时间:2010-05-11 12:14:42

标签: javascript jquery

我的表格中有thead部分和tbody部分。我正在使用jQuery来查找和计算TH中的所有table。这很好用。但与此同时,我想检查TDTH的{​​{1}}是否包含任何输入元素。

这是我到目前为止所做的:

tbody

我希望这些信息对你有帮助吗?

4 个答案:

答案 0 :(得分:3)

dataTypes = $('#' + _target + ' th').map(function(i, th) {
  var $table = $(th).closest('table');
  var pos = $table.index(th) + 1;
  return { "sSortDataType": $table.find('td:nth-child('+pos+')').is(':has(input)') ? 'input' : 'html' };
});

编辑:如果您在单个表上运行此操作(在这种情况下,原始示例中的each调用没有多大意义),它会变得更简单:

dataTypes = $('#' + _target + ' th').map(function(pos, th) {
  return { "sSortDataType": $(th).closest('table').find('td:nth-child('+(pos+1)+')').is(':has(input)') ? 'input' : 'html' };
});

答案 1 :(得分:0)

像这样:

if (jQuery(this).is(":has(input)")) {

您可以使用.map简化代码:

    dataTypes = jQuery('th', $table).map(function () {
        if (jQuery(this).is(":has(input)"))
            return { "sSortDataType": "input" };
        else
            return { "sSortDataType": "html" };
    }).get();

答案 2 :(得分:0)

如果您只是在寻找计数,那么您是否可以使用以下内容?

var thMatches = $('#' + _target + ' th');
var thCount = thMatches.length;
var thCountWithInputs = thMatches.find('input').length;

我没有把IDE放在我面前所以上面的内容可能不正确但是我觉得它非常接近你想要的。

答案 3 :(得分:0)

每个都会为您提供列表中元素的索引。假设所有TH元素都属于一个列,并且表中的其他地方没有TH,您可以使用它来查找每一行的第n个子TD(列)元素,看看是否有任何包含输入。 / p>

jQuery('#' + _target).each(function () {
    var $table = jQuery(this);
    var i = 0;
    jQuery('th', $table).each(function (column) {
        if ($('tbody > tr').find('td:nth-child(' + (column+1) + ')')
                           .has('input')
                           .length) {
            dataTypes[i] = { "sSortDataType": "input" }
        }
        else {
            dataTypes[i] = { "sSortDataType": "html" }
        }

        i++;
    });
});

编辑:nth-​​child是基于1的,而每个都是从零开始的,所以我在列变量中添加了一个来解释这一点。