jQuery仅检索具有非空值的文本框

Luc*_*ian 2 jquery

在jQuery中,我如何只获得具有非空值的文本框?

例:

<input type="text" id="i1" value="" />
<input type="text" id="i2" value="bla bla" />
<textarea id="i3">more bla bla</textarea>
<input type="text" id="i4" value="" />
Run Code Online (Sandbox Code Playgroud)

如何编写一个只能输入i2和i3的查询?(一次性,我试图避免"for"循环)

谢谢!

KAR*_*ván 8

这可以做到这一点:

var $nonEmptyItems = $("input,textarea").filter(function() {
  return $(this).val() != "";
});
Run Code Online (Sandbox Code Playgroud)


eth*_*han 5

首先,您的HTML应该看起来像这样:

<input type="text" id="i1" value="">
<input type="text" id="i2" value="bla bla">
<textarea id="i3">more bla bla</textarea>
<input type="text" id="i4" value="">
Run Code Online (Sandbox Code Playgroud)

我假设大多数浏览器默认type="text"为输入字段,如果没有指定,但我认为你不能依靠它们来弄清楚这val意味着什么value.最后,textarea文本必须介于<textarea>标签之间.

不过,关于你的问题.这条线将做你想要的:

$('input[type="text"], textarea').filter(function() { return $(this).val(); });
Run Code Online (Sandbox Code Playgroud)

您可以使用jQuery的grep函数,该函数循环遍历数组并仅保留您传递给函数的值(从中返回真值)$.grep.在这种情况下,您传递的数组是与$('input[type="text"], textarea')选择器匹配的jQuery对象数组,即文本字段和textareas.您传递的函数选择所需的元素只返回文本框或textarea的值.如果它为空,则返回值为falsy且节点被排除,如果它是任何非空字符串,则返回值为truthy且包含节点.