0

我正在使用经过大量修改的 jquery-tokeninput

它本质上是一个文本输入框,允许多个标签,就像堆栈溢出一样。

您可以通过运行以下命令获取当前输入中所有标签的返回值:

$("#no-custom-tokens").tokenInput("get")

问题是,它为我返回以下内容:

在此处输入图像描述

如果我尝试调用$("#no-custom-tokens").tokenInput("get").length它只是说未定义。

我需要检查这个对象内是否有任何 u1、u2 等(基本上.. 是输入空白)。

我考虑过做...

if ($("#no-custom-tokens").tokenInput("get").u1.name != "")

除了如果你删除令牌,然后再添加 2 个,它不会从 u1、u2 开始......它从 u3 和 u4 开始。

:/

4

3 回答 3

1

“我需要检查这个对象内是否有任何 u1、u2 等(基本上.. 是输入空白)。”

如果您基本上需要检查至少一个属性是否存在,并且属性是可枚举的,您可以这样做...

var has_props = false,
    obj = $("#no-custom-tokens").tokenInput("get");

for (var p in obj) {
    has_props = true;
    break;
}

console.log(has_props);

如果您想知道有多少,并且再次,如果它们是可枚举的,您可以使用Object.keys...

var props_len = Object.keys($("#no-custom-tokens").tokenInput("get")).length;

如果您支持较旧的浏览器,则只需要对其进行填充...

if (!Object.keys)
    Object.keys = function(o) {
        var keys = [];
        for (var k in o)
            if (o.hasOwnProperty(k))
                keys.push(k);

        return keys;
    };
于 2012-07-12T23:10:56.647 回答
1

看起来它是作为对象返回的,而不是数组,所以没有 .length 方法。如果您只想检查对象中是否有任何内容,您可以尝试遍历该对象并在找到任何内容时设置一个标志。所以:

var isEmpty = true;
var tokens = $("#no-custom-tokens").tokenInput("get");
for (var i in tokens) {
    isEmpty = false;
    break;
}
if (isEmpty) {
    ...
}
于 2012-07-12T23:11:23.307 回答
1

检查是否为空:

function isEmpty(obj) {
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) return false;
    }
    return true;
}

检查它的长度:

function objectLength(obj) {
    var size = 0;
    for (var i in obj) {
        if (obj.hasOwnProperty(i)) ++size;
    }
    return size;
}

// or:

function objectLength(obj) {
    return Object.keys(obj).length;
}
于 2012-07-12T23:17:49.637 回答