jquery 检查元素内是否有可见字符

e7arh2l6  于 2023-01-16  发布在  jQuery
关注(0)|答案(1)|浏览(118)

我很好奇在jquery(或javascript)中是否有一种简单的方法来检查divtd元素中是否有可见字符。

示例:

假设我有一个表,它的表头和下面的一行作为过滤器,如下所示:

<thead>
    <tr>
        <th>First Name</th>
        <th>Last Name</th>
        ....
    </tr>
    <tr>
        <th><input id="FirstNameFilter" /></th>
        <th>
            <select id="LastNameFilter">
                <option value="Smith">Smith</option>
                <option value="Doe">Doe</option>
                <option value="Nelson">Nelson</option>
            </select>
        </th>
        ....
    </tr>
</thead>

如果用户想根据名字过滤,他/她在相应的字段中键入一些内容,如果他/她想根据姓氏过滤,他/她从下拉列表中选择,然后激活一个javascript函数来过滤表格中的行。
现在,有没有一种方便的方法可以获取用户键入或选择的所有那些<th>
.is(':empty')或检查可见性显然不起作用,现在我能想到的唯一其他选项是检查th中是否有元素(因为也可能有没有过滤器的列),如果是input标记或select标记,则分别查询.val().(':selected').val()
因此,问题基本上是,是否有一种方法可以用1个函数检查,而不管<th>中的元素类型如何-我在想,也许有一种方法可以检查<th>中的某个地方(甚至包括它的子元素)是否有可见字符(在DOM上)?
谢谢

编辑

我基本上是在寻找一个选择器来选择:

  • 具有input元素且input元素不为空的th
  • th,其中包含一个select元素,并且选择了一些option(顺便说一下,其值不为空)

我不想听到的是:

  • th为空
  • 具有input元素但为空的th
  • 具有select元素但未选择任何选项或所选选项的值为空的th

希望你说得更清楚

qojgxg4l

qojgxg4l1#

也许你是这个意思?我不是测试标签没有一个值(例如一个跨度或这样的)-这需要更多的编码

const textAndValues = [...document.querySelectorAll('th')]
  .flatMap(th => [...th.childNodes]
    .map(node => node.nodeType === 1 ? node.value : node.textContent.trim()).filter(val => val)
  );

console.log(textAndValues)
<table>
  <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
    </tr>
    <tr>
      <th><input id="FirstNameFilter" /></th>
      <th>
        <select id="LastNameFilter">
          <option value="Smith">Smith</option>
          <option value="Doe">Smith</option>
          <option value="Nelson">Smith</option>
        </select>
      </th>
    </tr>
  </thead>
</table>

相关问题