Javascript jQuery在元素中获取文本,但忽略样式标记

Javascript jQuery在元素中获取文本,但忽略样式标记,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有测试div是否有一些非空白文本内容的javascript代码 这是可行的,但无法区分div中的文本内容或样式标记声明,如果没有文本内容,只有带有css数据的样式标记,测试将失败 问题是如何在忽略样式标记的情况下测试空文本内容 HTML: 测试URL: 一个选项是克隆元素并删除样式标记: $.fn.isTextless = function() { var txt = this.first() .clone() .fin

我有测试div是否有一些非空白文本内容的javascript代码

这是可行的,但无法区分div中的文本内容或样式标记声明,如果没有文本内容,只有带有css数据的样式标记,测试将失败

问题是如何在忽略样式标记的情况下测试空文本内容

HTML:

测试URL:

一个选项是克隆元素并删除
样式
标记:

$.fn.isTextless = function() {
   var txt = this.first()
                 .clone()
                 .find('style')
                 .remove()
                 .end()
                 .text();

   return $.trim(txt).length === 0; 
}

if ( $('#test2').isTextless() ) {
    alert('test2 has no content!');
} 

用实际长度减去
样式
标记的长度

试试看


样式标签要放在页面的头部。如果没有元素使用
style1
,为什么还有
.style1
?如果要更改div的样式,请执行
或在HTML页面的
部分进行样式声明


简而言之,您不应该在

使用以下javascript代码之外有
标记

document.getElementById('test2').innerText

您可以对需要检查的所有元素使用一个公共类,使用
每个
循环检查它们,存储初始HTML,删除样式标记,执行检查并恢复初始HTML。像这样:

$('.testdiv').each(function() {
    var divHtml = $(this).html();
    $(this).find('style').remove();

    if($(this).text().trim().length==0){
        alert( $(this).attr('id') + ' has no content!');
    } 
    $(this).html(divHtml);
});

您可以复制节点,然后删除样式标记,然后进行检查。(抛出一个想法)(必须有更好的答案)获取内部HTML并删除不想考虑的标签。<代码>正文> <代码>中的<代码>样式/代码>标签将无法验证;这在技术上是不正确的(除非它是HTML5范围的)@elclans你确定吗?非常确定,至少在HTML4中是这样,但是把它放在身体里没有意义,你什么也得不到,你失去了几毫秒的未格式化内容,所以它基本上是无用的。只有作用域样式在主体中才有意义,因为它们应用于父元素。
if($('#test1').text().trim().length==0){
    alert('test1 has no content!');
}    

if($('#test2').text().trim().length - $('#test2 style').text().trim().length ==0){
    alert('test2 has no content!');
}
document.getElementById('test2').innerText
$('.testdiv').each(function() {
    var divHtml = $(this).html();
    $(this).find('style').remove();

    if($(this).text().trim().length==0){
        alert( $(this).attr('id') + ' has no content!');
    } 
    $(this).html(divHtml);
});