【问题标题】:jQuery :contains help. Need it to select "8:00 p.m. - 8:00 p.m."jQuery : 包含帮助。需要它来选择“8:00 p.m. - 8:00 p.m.”
【发布时间】:2017-09-14 18:07:49
【问题描述】:

我在编写将识别“晚上 8:00”的 jQuery 时遇到问题。出现两次。我写的一切都会成功改变 “晚上 8:00 - 晚上 8:00” (以下简称“A”)至“晚上 8:00”也会改变 “晚上 8:00 - 晚上 10:00” (以下简称“B”)和 “早上 6:00 - 晚上 8:00” (以下简称“C”)至“晚上 8:00”

时间来自 PHP,考虑到 PHP 已经非常复杂,几乎可以显示所有可能的内容,所以用 PHP 编写解决方案超出了我的大脑能力 “2017 年 3 月 31 日星期五 - 2017 年 4 月 14 日星期五,上午 9:00 - 晚上 10:00”到 “2017 年 4 月 28 日,星期五,下午 2:00 - 下午 4:00。”到 “2017 年 2 月 9 日星期四 - 2017 年 2 月 11 日星期六晚上 8:00 - 晚上 8:00”以及介于两者之间的所有内容,所以我正在尝试用 jQuery 编写一个解决方案来解决这个问题。当一个事件在几天内有几次表演并且没有结束时间时,就会产生实际问题。例如:活动在星期四、星期五和星期六晚上 8:00 开始。并且没有结束时间。所以最终发生的事情是晚上 8:00。 - 8:00 PM。被展示。我想使用 jQuery 将其更改为晚上 8:00

最简单的解决方案是行不通的,不会改变 A、B 或 C。

$('span.eventTime:contains("8:00 p.m. - 8:00 p.m.")').text('8:00 p.m.');

我认为这是因为连字符,但这只是猜测。

但是,在 PHP 和 jQuery 中将“-”更改为“-”不起作用。仅在 PHP 中将其更改为“-”并在 jQuery 中保留“-”也不起作用。

所有有效的东西最终都会改变 A、B 和 C,因为代码看到“8:00”出现一次,并且不知道它只有在看到 2 个“8: 00"。

以下是我尝试过的其他解决方案的列表,这些解决方案并未专门将 A 更改为晚上 8:00。而不是 B 和 C:

$('span.eventTime:contains("8:00"):contains("p.m."):contains("-"):contains("8:00"):contains("p.m.")').text('8:00 p.m.');

$('span.eventTime:contains("8:00 p.m. -"):contains("8:00 p.m.")').text('8:00 p.m.');

$('span.eventTime:contains("8:00 p.m."):contains("- 8:00 p.m.")').text('8:00 p.m.');

$('span.eventTime:contains("8:00 p.m."):contains("-"):contains("8:00 p.m.")').text('8:00 p.m.');

我已经尝试过其他方法,但我已经从我的代码中删除了它们。以上所有这些不一定都有效。

下面的代码适用于 A 和 B,但它既麻烦又愚蠢,而且我必须写很多、很多、更长的时间才能涵盖所有可能的选项,比如 C,我不喜欢这个想法。

$('span.eventTime:contains("8:00"):contains("p.m."):contains("-"):contains("8:00"):contains("p.m."):not(:contains("9:00"):contains("p.m.")):not(:contains("10:00"):contains("p.m."))').text('8:00 p.m.');

所以...也许你们可以解决这个问题,因为我已经无计可施了。

我目前正在使用下面的内容,但我讨厌它——它很愚蠢,即使它有效。而且我必须编写涵盖超过晚上 8:00 的迭代。 - 晚上 8:00

$('span.eventTime:contains("8:00"):contains("p.m."):contains("-"):contains("8:00"):contains("p.m."):not(:contains("a.m.")):not(:contains("1")):not(:contains("2")):not(:contains("3")):not(:contains("4")):not(:contains("5")):not(:contains("6")):not(:contains("7")):not(:contains("9")):not(:contains("10")):not(:contains("11")):not(:contains("12"))').text('8:00 p.m.');

【问题讨论】:

  • moment.js 会帮助你吗?
  • 注意:我的连字符 HTML 最终变成了连字符。我有“-”没有写的空格。这是更正的句子:但是,将“-”更改为“-”在 PHP 和 jQuery 中都不起作用。将其更改为“-”仅在 PHP 中并在 jQuery 中留下“-”也不起作用。
  • 这很酷,johnny,但我快到最后期限了,没有时间实施新的东西。
  • 你肯定不能改PHP?
  • 我可以,但我不知道如何编写复杂的语句来防止晚上 8:00。 - 8:00 PM。不会发生。

标签: jquery jquery-selectors contains


【解决方案1】:

这对我使用 vanilla JS 很有用,但我已经准备好用 JQ doc 包装了。

<script>
$(document).ready(function () {
    var spans = document.getElementsByClassName('eventTime');
    for (var i = 0; i < spans.length; i++) {
        var time = spans[i].innerHTML;
        if (time === "8:00 p.m. - 8:00 p.m.")
            spans[i].innerHTML = "8:00 p.m.";
    }
});
</script>

【讨论】:

  • 如果你写了这样的东西,你实际上不必写出每个案例的实际时间——只要看看时间字符串的第一部分是否与第二部分匹配,如果是,使用您跨度中的第一次字符串:&lt;script&gt; $(document).ready(function () { $('span.eventTime').each(function () { var time = $(this).text().split('-'); if (time[0].trimRight() === time[1].trim()) $(this).text("changed"); }); }); &lt;/script&gt;
猜你喜欢
  • 2015-11-05
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多