我想从段落中删除所有后跟字符“ا”的‍
。我使用以下方法,但控制台表示找不到此组合。请注意,这是波斯语单词,字符“ا”紧接‍
之后,因为这些字符被写成从右到左,并且在字符“ا”证明它们已连接在一起之前是尾巴
$(document).ready(function(){
var htm=$("div").html();
var shouldRemove="‍ا";
if (htm.includes(shouldRemove)){
console.log('found');
}
else{
console.log('not found');
}
})
body{font-size:26pt}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>‍احترام</div>
答案 0 :(得分:1)
执行此操作的一种方法是使用以下方法将‍ا
转换为文本,并获取div
而不是其html的文本,然后比较两个文本:>
$(document).ready(function(){
// get the text
var div_txt = $("div").text();
var shouldRemove = "‍ا";
// put it as html in a span, then get it as text
var rem_txt = $("<span>").html(shouldRemove).text();
if (div_txt.includes(rem_txt)) {
console.log('found');
} else {
console.log('not found');
}
})
body {
font-size:26pt
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>‍احترام</div>
答案 1 :(得分:1)
这里的问题是,当从DOM中读取HTML实体时,该实体会被解析,因此字符序列Class1
变成了单个字符ZERO WIDTH JOINER。
如果您要在命令行上运行JavaScript,您的方法将起作用:
‍
即使在浏览器中,如果直接使用JavaScript控制台,一切也会按预期运行:
那么从DOM中读取(在您的情况下,使用jQuery)有什么不同?要查看发生了什么,让我们检查字符串中的实际字符:
$ node
> s = '<div>‍احترام</div>'
'<div>‍احترام</div>'
> s.includes("‍ا")
true
$(document).ready(function(){
var htm=$("div").text();
console.log(Array.from(htm));
console.log(Array.from("‍ا"));
})
这给出了:
哈哈,所以jQuery正在解析HTML实体!因此,您要搜索的文本应该具有 JavaScript zwj,而不是HTML。像这样指定它:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>‍احترام</div>
$(document).ready(function(){
var htm=$("div").html();
var shouldRemove="\u{200d}ا";
if (htm.includes(shouldRemove)){
console.log('found');
}
else{
console.log('not found');
}
})
body{font-size:26pt}
现在它输出<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>‍احترام</div>
。
因此RTL(文本方向)一切正常!原来,这仅是何时解析HTML实体的问题。 :)
答案 2 :(得分:1)
而不是在HTML内部搜索实体‍
,而是在div
节点的 text 值中搜索字符本身(code point +U200D)(而不是其节点)。 HTML):
console.log("Found?", $("div").text().includes("\u200Dا"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>‍احترام</div>
答案 3 :(得分:0)
如果您在控制台上登录htm变量,它将以/的形式输出:احترام,因此,当您尝试使用“ ا”进行搜索时,它输出为“未找到”。请尝试以下方法:
$(document).ready(function(){
var htm=$("div").html();
var shouldRemove="ا";
if (htm.includes(shouldRemove)){
console.log('found');
}
else{
console.log('not found');
}
})
body{font-size:26pt}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>‍احترام</div>