我试图根据文本为HTML td元素添加“title”属性。
我写了以下内容:
$("tr.sel-rtac-first td:first-child").each(function(t,x){
var hours = "";
var text = $(x).text();
switch (text) {
case (text.includes("מרכזית-מדף פתוח") == true):
hours = "יהדות 401: א - ה 08:00 - 19:00"
break;
default: hours = "text"
}
$(x).attr("title",hours);
});
我可以在测试中看到text变量正在接收正确的文本:
"
Cen.lib-Stacks - מרכזית-מדף פתוח -#Four weeks - ארבעה שבועות#
"
文本是希伯来语,但你可以清楚地看到我正在寻找的文本确实是变量文本的一部分。然而,它恢复到默认值,而不是认识到文本包含该段。
我也尝试在代码中没有== ture:
case (text.includes("מרכזית-מדף פתוח")):
但这也不起作用。
我测试的先前解决方案是使用.title()函数,但这也不起作用(我怀疑因为元素没有开头的title属性,我正在添加一个)。
如何确保包含函数识别出子字符串确实在文本中?
使用if
语句而不是开关案例,如@ mark.hch建议的那样。
关于越野车包括,使用您提供的代码无法重现该问题:
const haystack = 'Cen.lib-Stacks - מרכזית-מדף פתוח -#Four weeks - ארבעה שבועות#';
const needle = 'מרכזית-מדף פתוח';
console.log(haystack.includes(needle));
您观察到的错误可能源于其他地方。
你使用的'thewitch'和'case'是不好的。
你可以写:
$("tr.sel-rtac-first td:first-child").each(function(t,x){
var hours = "";
var text = $(x).text();
if (text && text.includes("מרכזית-מדף פתוח")) {
hours = "יהדות 401: א - ה 08:00 - 19:00";
} else {
hours = "text";
}
$(x).attr("title",hours);
});
处理此类搜索的最佳方法是使用unicode标志的RegExp:u
:
// RegEx literal syntax for unicode ex. a => U+61 => \u{61} /\u{5DE}\u{5E8}\u{5DB}\u{5D6}\u{5D9}\u{5EA}\x2D\u{5DE}\u{5D3}\u{5E3} \u{5E4}\u{5EA}\u{5D5}\u{5D7}/u
当我试图突出显示某些字母时,堆栈编辑器会跳过它们。为了避免从不同语言派生的任何不兼容性,unicode是一种可能的解决方案。使用ES2015 Unicode regular expression transpiler可以进行翻译。
除了上面的建议 - 需要解决jQuery逻辑:
.each()
方法并引用当前元素时,请使用$(this)
var text = $(this).text()
.includes()
和.test()
(演示中的Regexp方法)之类的方法返回true
或false
。处于某种情况时,语法较不详细:
if (RegExp.test("String")) {...
使用== true
会产生相同的结果,但在其他情况下它可以改变类型,所以要小心。$("tr td:first-child").each(function(){
var text = $(this).text();
if (/\u{5DE}\u{5E8}\u{5DB}\u{5D6}\u{5D9}\u{5EA}\x2D\u{5DE}\u{5D3}\u{5E3} \u{5E4}\u{5EA}\u{5D5}\u{5D7}/u.test(text)) {
$(this).attr("title", "יהדות 401: א - ה 08:00 - 19:00");
} else {
$(this).attr('title', text);
}
});
table {
table-layout: fixed;
width: 80vw;
height: 80vh;
margin: 5vh auto
}
td {
width: 33%;
}
table, td {
border: 1px solid #000
}
td::before {
content: ' ';
min-height:20px;
}
<table>
<tr><td>Cen.lib-Stacks - מרכזית-מדף פתוח -#Four weeks -
ארבעה שבועות#</td><td></td><td></td></tr>
<tr><td>TEST</td><td></td><td></td></tr>
<tr><td>TEST</td><td></td><td></td></tr>
<tr><td>TEST</td><td></td><td></td></tr>
<tr><td>Cen.lib-Stacks - מרכזית-מדף פתוח -#Four weeks -
ארבעה שבועות#</td><td></td><td></td></tr>
<tr><td>TEST</td><td></td><td></td></tr>
<tr><td>TEST</td><td></td><td></td></tr>
<tr><td>TEST</td><td></td><td></td></tr>
<tr><td>Cen.lib-Stacks - מרכזית-מדף פתוח -#Four weeks -
ארבעה שבועות#</td><td></td><td></td></tr>
<tr><td>TEST</td><td></td><td></td></tr>
</table>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>