我有一个带有表单模块的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
}
}
提前致谢
答案 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'))
});
如果您只想返回实际拥有文本的元素,您可以使用它:
$('td').filter(function() {
var t = $(this), children = t.children();
return t.text().length > 0
&& (children.length == 0
|| (children.length == 1 && children.first().is('b')))
})