提问人:Christoph Linden 提问时间:11/13/2023 更新时间:11/13/2023 访问量:33
jQuery 简单匹配不返回任何内容 [已关闭]
jQuery simple match does not return anything [closed]
问:
我正在尝试将网页上的所有日期元素转换为另一种日期格式。
以下是日期字符串的格式: YYYY-MM-DD
我试图说服jQuery使用以下匹配来识别3个日期字段: /(\d{4})-(\d{1,2})-(\d{1,2})/
但是,我的jQuery代码不返回任何内容(null对象):
jQuery(document).ready(function($) {
$('#geburtsdatum').each(function() {
console.log($(this).attr('id'));
var gebdatum = $(this).text();
console.log(gebdatum);
var text = "The rain in SPAIN stays mainly in the plain";
var result = text.match(/ain/gi);
console.log(result);
text = "1981-12-08";
result = text.match(/\d{1,4}/gi);
console.log(result);
var m = gebdatum.match(/(\d{4})-(\d{1,2})-(\d{1,2})/);
console.log(m);
gebdatum = [ m[3], m[2], m[1] ].join('.');
$(this).text(text);
});
});
下面是相应的控制台输出:
JQMIGRATE: Migrate is installed, version 3.4.1
geburtsdatum
1983-11-18
(4) ['ain', 'AIN', 'ain', 'ain']
null
null
所以我在里面做了一些测试来验证 .match() 函数。
第一个测试正在工作...... 此外,字符串已正确设置,因此 gebdatum 具有预期的输入。
即使是这个简单的匹配也应该返回完全相同的结果: /\d{1,4}/gi
它是空的。如 \d 不被解释为数字。我需要另外逃跑\,还是这里发生了什么?
这是我喜欢的实际代码:
jQuery(document).ready(function($) {
$('#geburtsdatum').each(function() {
console.log($(this).attr('id'));
var gebdatum = $(this).text();
var m = gebdatum.match(/(\d{4})-(\d{1,2})-(\d{1,2})/);
gebdatum = [ m[3], m[2], m[1] ].join('.');
$(this).text(text);
});
});
答:
0赞
AztecCodes
11/13/2023
#1
所做的更改:
- 从 ID 更改为类选择器 ($('.geburtsdatum')),以定位多个元素。
- 添加了错误处理,以检查日期格式是否匹配并避免 JavaScript 错误。
- 更正了文本替换逻辑,以使用重新格式化的日期 (gebdatum) 而不是未定义的变量。
修订守则:
jQuery(document).ready(function($) {
$('.geburtsdatum').each(function() {
var gebdatum = $(this).text();
var m = gebdatum.match(/(\d{4})-(\d{1,2})-(\d{1,2})/);
if (m) {
gebdatum = [m[3], m[2], m[1]].join('.');
$(this).text(gebdatum);
} else {
console.log('Date format not matched for:', gebdatum);
}
});
});
评论
0赞
Christoph Linden
11/13/2023
我不确定为什么我的线程被关闭了,因为那也不是解决方案。该字符串每次都是 100% 正确的,因为它是 SQL 日期字段输出。所以它不能是任何不同的值。问题还在于匹配,仅此而已。是的,我确实理解(并且自己发现)匹配 id 不会提供例外结果,即使我不明白为什么如果这不能为您提供所有匹配的 ID,为什么会有 foreach。
0赞
Christoph Linden
11/13/2023
无论如何,问题(我很想把它反馈给一个 anwser)是,无论出于何种原因,wordpress 和 WPBakery 插件实际上确实需要一个转义的 \,因为它在其他方面试图转义 d。所以答案看起来像 ''' gebdatum.match(/(\\d{4})-(\\d{1,2})-(\\d{1,2}); '''
评论
$('#geburtsdatum').each
ID 必须是唯一的,因此这只会循环一次(最多) - 使用类$(this).text(gebdatum)
null
input