Javascript - Как заменить простую строку - PullRequest
1 голос
/ 29 января 2020

Я перепробовал все варианты, чтобы заменить строку «sub events» на «selected». Я еще не коснулся «sub events», но затронул все вокруг.

Это скрыло все после него:

<script type="text/javascript">
$(function(){
$("div[class$=registrationDetails] > ul > li").text(function(){
     var str = $(this).text("and the sub events").str.replace("sub events", "selected");
});
});
</script>

Я попробовал метод W3 School, который я также нашел в другом посте StackOverflow, и он ничего не сделал. Это самая базовая c форма, которую я пробовал этим методом.

<script type="text/javascript">
var str1 = "and the sub events";
var str2 = str1.replace("sub events", "selected");
</script>

Кажется, это так близко, но не заменит, как следует. Спасибо.

Ответы [ 4 ]

1 голос
/ 29 января 2020

Сначала пересмотрите, как вы возвращаете свое значение в обратном вызове, и replace как таковое. Все это при условии, что <li /> содержит текст, который вы хотите заменить.

$(function(){
  $("div[class$=registrationDetails] > ul > li").text(function() {
    return this.innerText.replace("sub events", "selected");
  });
});
0 голосов
/ 07 февраля 2020

Я нашел скрипт для замены текста и поддержания форматирования списка html.

<script type="text/javascript">
$('div.registrationDetails > ul > li').html(function(i, htm){
    return htm.replace(/sub events/, 'selected');
});
</script>
0 голосов
/ 29 января 2020

Это сработало для меня.

var str1 = "and sub events";

str1 = str1.replace ("sub events", "selected")

console.log (str1)

Вывод -

[Running] узел ".. \ test. js" и выбранный

0 голосов
/ 29 января 2020

Вот способ сделать то, что вы хотите с каждым l oop. Использовал оператор if, чтобы посмотреть, есть ли совпадение

$(function() {
  // select the class with a dot, not attribute selector
  $("div.registrationDetails > ul > li").each(
    function() {
      /// read text
      var text = $(this).text()
      // check if text is there
      if (text.includes('sub events')) {
        // if it is replace
        var str = text.replace('sub events', 'selected')
        //update the element
        $(this).text(str) 
      // another change
      } else if (text.includes('selected')) { 
        var str = text.replace('selected', 'sub events')
        $(this).text(str) 
      }
    }
  );
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>


<div class="registrationDetails">
  <ul>
    <li>foo bar sub events</li>
    <li>other selected</li>
  </ul>
</div>

Есть и другие способы сделать это, но это базовый c шаг в том, что вы пытались сделать.

A более сложный способ сделать это с текстом и reg exp с заменой.

// called by the replace method
// returns the opposite of what was matched
function replacerFnc (match) {
  return match==="sub events" ? "selected" : "sub events"
}

// What is called by jQuery's text method
function replacement(index, text) {
  // regular expression with groups to match either one of the strings
  var re = /(sub events|selected)/
  // use the reg exp and replace the string
  return text.replace(re, replacerFnc)
}

// basic jQuery code to select the lis and set the text
$(function() {
  $("div.registrationDetails > ul > li").text(replacement);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>


<div class="registrationDetails">
  <ul>
    <li>foo bar sub events</li>
    <li>other selected</li>
  </ul>
</div>
...