我可以使用 CSS 选择空文本区域吗?

发布于 2024-11-29 14:38:00 字数 262 浏览 0 评论 0原文

有没有一种方法可以选择一个文本区域,使得 jQuery 中的 $('#id_of_textarea').val() 将为 ''?我尝试使用 :empty。我看到 CSS 提供了一种选择空输入的方法,因为文本位于 value 属性 ([value=""]) 中。文本区域中的文本是否有属性?

我正在寻找一个可以与 CSS 一起使用的选择器,而不仅仅是 jQuery。

Is there a way that I can select a textarea such that $('#id_of_textarea').val() in jQuery will be ''? I tried using :empty. I saw that CSS provides a way to select empty inputs because the text is in the value attribute ([value=""]). Is there an attribute for the text in a textarea?

I'm looking for a selector that will work with CSS, not just jQuery.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

空心空情空意 2024-12-06 14:38:00

我能想到的最佳解决方案是 CSS 3 解决方法。将字段设置为必填(如果需要,可以在提交时取消设置)。然后你可以使用

textarea:invalid { /* style here... probably want to remove box-shadow and such */ }

Best solution I can think of is a CSS 3 workaround. Set the field to required (and unset it on submit if need be). Then you can use

textarea:invalid { /* style here... probably want to remove box-shadow and such */ }
菊凝晚露 2024-12-06 14:38:00

这适用于除 Edge 之外的最新浏览器(目前):

textarea:placeholder-shown {
  /* this should be active only when area is empty and placeholder shown */
}

因此,以 jQuery 为例,您可以选择所有空文本区域:

$('textarea:placeholder-shown').val()

https://developer.mozilla.org/en/docs/Web/CSS/:placeholder-shown

this works in recent browsers except edge (at the moment):

textarea:placeholder-shown {
  /* this should be active only when area is empty and placeholder shown */
}

so with jQuery for example you can pick all empty textareas:

$('textarea:placeholder-shown').val()

https://developer.mozilla.org/en/docs/Web/CSS/:placeholder-shown

帥小哥 2024-12-06 14:38:00

如果您使用 React,那么这就是解决方案:

textarea:not(:empty) {

 // Apply css here

}

例如,

/* Apply style when textarea contains text */

textarea:not(:empty) {
  border: 6px solid blue;
  padding: 6px;
}

工作演示:
Textarea - 使用 CSS 选择空文本区域

注意:在 React 中完美运行(因为状态更新导致重新绘制),如果使用 Vanilla HTML + CSS 实现,它不会提供相同的响应。

If you're using React, then this is the solution:

textarea:not(:empty) {

 // Apply css here

}

For instance,

/* Apply style when textarea contains text */

textarea:not(:empty) {
  border: 6px solid blue;
  padding: 6px;
}

Working demo:
Textarea - Select empty textarea using CSS

Note: While this works perfectly in React (because of re-painting caused by state update), It does not provide the same response if implemented using Vanilla HTML + CSS.

晌融 2024-12-06 14:38:00

这工作得很好,就像输入一样:

<textarea name="comment" id="comment" class="authority_body-input" data-val="{$form.comment}" onkeyup="this.setAttribute('data-val', this.value);">

textarea.authority_body-input:not([data-val=""]):not(:focus) {
    color: red;
}

This works fine, as with input:

<textarea name="comment" id="comment" class="authority_body-input" data-val="{$form.comment}" onkeyup="this.setAttribute('data-val', this.value);">

textarea.authority_body-input:not([data-val=""]):not(:focus) {
    color: red;
}
淡写薰衣草的香 2024-12-06 14:38:00

您可以使用 :empty css 伪类。

请参阅 jsfiddle 中的示例。

在示例中,有一个按钮用于动态地将新的空文本区域添加到 DOM,因此您可以看到新元素也受到伪类的影响。

示例中的代码在 Firefox 5.0、Opera 11.50 和 Chromium 12 中进行了测试。

此外,您还可以看到 :empty 伪类的良好描述 此处

You can use the :empty css pseudo-class.

See an example in jsfiddle.

In the example there is a button for dynamically add new empty textareas to the DOM, so you can see that the new elements also are affected with the pseudo-class.

The code in the example was tested in Firefox 5.0, Opera 11.50 and Chromium 12.

Also, you can see a good description for the :empty pseudo-class here.

诺曦 2024-12-06 14:38:00

对于那些使用 AngularJS 的人,您可以在视图中使用 ng-class 向文本区域添加一个类以了解它是否为空。

HTML:

<textarea ng-model="myForm.myTextArea"
          ng-class="(myForm.myTextArea.length)?'not_empty':'empty'">
</textarea>

CSS:

textarea.empty {
    background-color:red;
}
textarea.not_empty {
    background-color:blue;
}

这是一个 jsfiddle

For those who are using AngularJS, you can use ng-class in your view to add a class to your textarea to know if it is empty or not.

HTML :

<textarea ng-model="myForm.myTextArea"
          ng-class="(myForm.myTextArea.length)?'not_empty':'empty'">
</textarea>

CSS :

textarea.empty {
    background-color:red;
}
textarea.not_empty {
    background-color:blue;
}

Here is a jsfiddle.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文