检查元素是否包含字符串,而不是字符串 - 也许是正则表达式

时间:2011-10-28 07:47:47

标签: javascript jquery html regex

我有一个带有表单模块的CMS,它会生成一个糟糕的标记,这使得它绝对不可能。表单对象和元素嵌套在不计其数的表,行和单元格中。

我正在通过javascript过滤掉我需要的所有元素,将它们放在一个数组中,并使用这些元素创建新的frontenddeveloper友好标记。

输入字段,图例和字段集没有问题 - 但我在过滤标签时遇到问题。我的标签包含如下:<tr><td>Label</td></tr><tr><td><b>Label</b></td></tr> - 我需要将其过滤掉,并将它们放入数组中。

有没有更简单的方法来检查,如果我的td包含纯字符串,而不是输入或其他一些html元素,除了使用正则表达式?

var regex = new RegExp(???);
jQuery("td").each( function() {
    if(jQuery(this).has("b") || regex.test(jQuery(this).text()))
    {
        // Do stuff here
    }
}

提前致谢

2 个答案:

答案 0 :(得分:2)

你可以试试这个正则表达式

var regex = new RegExp('^[^<]*$')

如果td文本中的任何位置没有打开html标记,则匹配。如果您不想匹配空字符串,请使用+代替*

<强>解释

"^" +       // Assert position at the beginning of the string
"[^<]" +    // Match any character that is NOT a “<”
   "*" +       // Between zero and unlimited times, as many times as possible
"$"         // Assert position at the end of the string 

答案 1 :(得分:2)

这将返回所有没有子节点的td或者只有一个粗体标记的子节点。

$('td').filter(function() {
    var children = $(this).children();
    return children.length == 0 
              || (children.length == 1 && children.first().is('b'))
});

http://jsfiddle.net/t9bMG/

如果您只想返回实际拥有文本的元素,您可以使用它:

$('td').filter(function() {
    var t = $(this), children = t.children();
    return t.text().length > 0 
               && (children.length == 0 
                    || (children.length == 1 && children.first().is('b')))
})

http://jsfiddle.net/t9bMG/1/