Не удается снова удалить символ, который я добавил с помощью JS

#javascript #html #arabic #farsi

#javascript #HTML #Арабский #farsi

Вопрос:

По некоторым причинам я добавляю joiner нулевой ширины к ключевому слову. Я хочу исключить его добавление, когда ключевое слово находится в начале новой строки, но я не могу удалить его снова.

Я предполагаю две причины этой проблемы, но я понятия не имею, как решить проблему в обоих случаях:

1- неправильное использование n и r для определения начала строки?

2- Когда я проверяю сгенерированный html после добавления joiner, я вижу, что добавленный символ amp;zwj; заключен в двойные кавычки, подобные "amp;zwj;" . Нужно ли мне учитывать эти цитаты при попытке их удаления?

 var tail="u200D";
var keyword="است";

var htm=$("#test").html();

//Adding joiner to keywords
htm=htm.split(keyword).join(tail '<span class="red">' tail keyword tail '</span>' tail);

//Removing all possible combination of joiner with new lines
htm=htm.split('rn' tail).join('rn');
htm=htm.split('n' tail).join('n');
htm=htm.split('r' tail).join('r');
htm=htm.split('rn' '<span class="red">' tail).join('rn' '<span class="red">');
htm=htm.split('n' '<span class="red">' tail).join('n' '<span class="red">');
htm=htm.split('r' '<span class="red">' tail).join('r' '<span class="red">');

 $("#test").html(htm);  
 div{font-size:36pt;}
.red{color:red}  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test">استکان</div>  

Комментарии:

1. Символы, обычно используемые в Windows для начала новой строки, — это возврат каретки ( r ), за которым следует перевод строки ( n ) — Так что следует искать последовательности CRLF, а не LFCR, как у вас. TLDR: rn является правильным, nr с другой стороны, это LFCR. 😉

2. Спасибо, но замена all n на rn не внесла никаких изменений. Вы имеете в виду что-то другое? @enhzflep

3. Я не уверен. Я думаю, что имею в виду что-то другое. В любом случае, с тех пор я протестировал свое предложение и обнаружил, что оно совершенно бесполезно. Я не могу не задаться вопросом, почему вы ищете символ LF, затем что-то еще, наконец, ищете CR. Символы должны быть смежными (единый блок без пробелов), и поэтому я ожидаю, что мне придется находить их вместе. Поскольку я почти никогда не работал ни на каком другом языке, кроме английского (и никогда не на языках RTL), я подозреваю, что у меня недостаточно квалификации, чтобы оказать какую-либо помощь. Извините!

4. Ваша переменная htm буквально содержит строку "استکان" , здесь нет символа в конце строки. И даже если бы он был, символы в конце строки игнорируются при анализе в DOM. jsfiddle.net/xvmo5dLg Чего вы действительно хотите достичь? Вы хотите найти узлы, которые находятся в начале контейнера, или вы хотите найти узлы, которые отображаются после разрыва строки? Это два совершенно разных запроса.

5. Точно я хочу найти узлы, которые отображаются после разрыва строки, и удалить » u200D», если он находится в начале этих строк. @Kaiido

Ответ №1:

используйте .text() вместо .html() для поиска:

 if($("#test").text().startsWith(tail)) 
    $("#test").html($("#test").html().replace(tail, ''));
  

Комментарии:

1. Спасибо, но это удалит все появления tail . Я должен сосредоточиться на тех, которые размещены в начале строк.