Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中获取字符串中字符前面的文本_Javascript_Jquery - Fatal编程技术网

在Javascript中获取字符串中字符前面的文本

在Javascript中获取字符串中字符前面的文本,javascript,jquery,Javascript,Jquery,我试图在javascrip中获取字符串中“-”之前的文本,例如,我希望从2021年2月27日11:30到2021年2月27日11:30到12.30 下面是代码片段,但我得到了错误:无法读取未定义的属性“split” console.log( 新的国际日期时间格式(“en-US”{ 工作日:“长” }).格式( 新日期( $(“#上午事件预订”).find('am-event-sub-info:eq(1)).innerHTML.split('-')[0]//仅对“2021年2月27日上午11:3

我试图在javascrip中获取字符串中“-”之前的文本,例如,我希望从2021年2月27日11:30到2021年2月27日11:30到12.30

下面是代码片段,但我得到了错误:无法读取未定义的属性“split”

console.log(
新的国际日期时间格式(“en-US”{
工作日:“长”
}).格式(
新日期(
$(“#上午事件预订”).find('am-event-sub-info:eq(1)).innerHTML.split('-')[0]//仅对“2021年2月27日上午11:30”部分感兴趣
)
)
)

容量:0/100
2021年2月27日上午11:30-下午1:00

有两种方法可以找到这个答案。

示例一:

let date=“2021年2月27日上午11:30-下午1:00”;
让extractDate=date.substr(0,date.indexOf('-');
console.log(提取日期);
例二:

let date=“2021年2月27日上午11:30-下午1:00”;
让extractDate=date.split('-')[0];
console.log(提取日期);
您已在id属性
中添加了
#
. 但您将遇到另一个问题,因为您在日期构造函数中传递的日期无效。您可以通过将第27个替换为第27个

console.log(
新的国际日期时间格式(“en-US”{
工作日:“长”
}).格式(
新日期(
$(“#am事件预订”)。查找('.am事件子信息:eq(1)')。text().trim().split('-')[0]。替换('-')//仅对“2021年2月27日上午11:30”部分感兴趣
)
)
)

容量:0/100
2021年2月27日上午11:30-下午1:00
使用Jquery
text()
可以获得期望值

$(文档).ready(函数(){
const innerHTMl=$(“.am事件子信息”).text();
log(innerHTMl.split('-')[0]);
})

容量:0/100
2021年2月27日上午11:30-下午1:00

导致此错误的原因是您尝试拆分的字符串未定义,这是因为ST jQuery语法无法正确返回您期望的结果

还有两个问题:

  • 有多个am事件信息div。我在下面的代码中考虑到了这一点
  • 您正试图解析一个不规则的日期字符串,它实际上是一个时间范围
  • 我建议您使用纯js解决方案,在该解决方案中,我们首先确定所有am事件子信息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);
    
        }
    
    })
    

    jQuery元素没有
    .innerHTML
    ,而是
    .val()
    。这是正确的,但是OP的代码有一个不同的问题。。。