[英]Getting text before a character in a string in Javascript
我正在尝试在 javascrip 中的字符串中获取“-”之前的文本,例如,我想从 2021 年 2 月 27 日 11:30 - 12.30 获得 2021 年 2 月 27 日 11:30。
下面是代码片段,但我收到错误:无法读取未定义的属性“拆分”。
console.log( new Intl.DateTimeFormat('en-US', { weekday: 'long' }).format( new Date( $("#am-events-booking").find('am-event-sub-info:eq(1)').innerHTML.split(' - ')[0] // only interested in the "February 27, 2021 11:30 am" part ) ) )
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="#am-events-booking"> <div class="am-event-info"> <div class="am-event-sub-info"> <div class="am-event-sub-info-capacity"><img src=""> Capacity: 0 / 100</div> <,----> </div> <div class="am-event-sub-info"> <div><img src="">February 27th: 2021 11:30 am - 1:00 pm</div> </div> </div> </div>
您在 id 属性<div id="#am-events-booking">
中添加了#
。 但是您会遇到另一个问题,因为您在 Date 构造函数中传递了无效的日期。 您可以通过将27th
日替换为27
日来确定日期
console.log( new Intl.DateTimeFormat('en-US', { weekday: 'long' }).format( new Date( $("#am-events-booking").find('.am-event-sub-info:eq(1)').text().trim().split(' - ')[0].replace("th","") // only interested in the "February 27, 2021 11:30 am" part ) ) )
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="am-events-booking"> <div class="am-event-info"> <div class="am-event-sub-info"> <div class="am-event-sub-info-capacity"><img src=""> Capacity: 0 / 100</div> <,----> </div> <div class="am-event-sub-info"> <div><img src="">February 27th: 2021 11:30 am - 1:00 pm</div> </div> </div> </div>
使用 Jquery text()
您可以获得预期值
$(document).ready(function(){ const innerHTMl = $(".am-event-sub-info").text(); console.log(innerHTMl.split('-')[0]); })
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="#am-events-booking"> <div class="am-event-info"> <div class="am-event-sub-info"> <div class="am-event-sub-info-capacity"><img src=""> Capacity: 0 / 100</div> <,----> </div> <div class="am-event-sub-info"> <div><img src="">February 27th: 2021 11:30 am - 1:00 pm</div> </div> </div> </div>
有两种方法可以解决这个问题。
示例一:
let date = "February 27th, 2021 11:30 am - 1:00 pm";
let extractDate = date.substr(0, date.indexOf('-'));
console.log(extractDate);
示例二:
let date = "February 27th, 2021 11:30 am - 1:00 pm";
let extractDate = date.split('-')[0];
console.log(extractDate);
该错误是因为您尝试拆分的字符串未定义,这是因为 jQuery 语法无法正确返回您期望的内容。
还有两个问题:
我建议你一个纯 js 解决方案,我们首先识别所有 am-event-sub-info div,遍历它们,检查它们是否包含日期,如果是,则在该日期操作:
let dates = document.querySelectorAll('.am-event-sub-info');
dates.forEach(function(e) {
let dateString = e.innerText;
if (!isNaN(Date.parse(dateString))) {
let date = new Intl.DateTimeFormat('en-US', {
weekday: 'long'
}).format(
new Date(dateString)
)
//do something with "date"
console.log(date);
}
})
但是由于您的日期字符串的格式不规则,如果您希望上述内容正常工作,您需要对其进行处理。 如果您只对日期本身感兴趣,请使用一些正则表达式将 let dateString 转换为有效日期,这将使下面的功能代码:
let dates = document.querySelectorAll('.am-event-sub-info');
dates.forEach(function (e) {
var dateString = e.innerText;
let re = /(\w+) (\d{1,2}\w\w), (\d\d\d\d)/;
if (re.test(dateString)) {
var match = re.exec(dateString);
let day = /\d{1,}/.exec(match[2])
let month = match[1].slice(0, 3);
let year = match[3];
let dt = new Date(Number(day, month, year));
//dt is now your full date
let date = new Intl.DateTimeFormat('en-US', {
weekday: 'long'
}).format(dt)
//do something with your formatted "date"
console.log(date);
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.