Как заставить JavaScript менять строку, если она совпадает с другой строкой? - PullRequest
1 голос
/ 05 октября 2019

Мне нужно изменить country-name на "Deutschland", если API дает взамен "Germany". Во всех остальных случаях код работает хорошо. Не могу понять, как это сделать.

JS:

<script type="text/javascript">
    function runOnLoad() {
        $.get("https://api.ipdata.co?api-key=6e6bf80b946bedd9daf3c7f799b44683b22333501994fa8af57ce0fa", function (response) {
            country_name = response.country_name;
            $("#country_name").text(country_name || 'Deutschland');
        }, "jsonp");
    }
    if(document.readyState === "complete") {
        runOnLoad();
    } else {
        window.addEventListener("onload", runOnLoad, false);
    }
</script>

HTML:

<span id="country_name">Deutschland</span>

1 Ответ

1 голос
/ 05 октября 2019

Используйте условный оператор внутри .text:

$("#country_name").text(country_name === 'Germany' ? 'Deutschland' : country_name);

Имейте в виду, что неявно неявно создавать глобальные переменные (в строгом режиме это даже приведет к ошибке) - лучше всегоявным образом объявите переменную country_name в обратном вызове .get:

var country_name = response.country_name;

или, в синтаксисе ES6:

const { country_name } = response;

Или, если вам нужно , кратное условия для отображаемого имени, вы можете вложить условный оператор (который затрудняет чтение) или использовать if / else:

const displayCountryName = str => $("#country_name").text(str);

// ...
  const { country_name } = response;
  if (country_name === 'Germany') {
    displayCountryName('Deutschland');
  } else if (!country_name) {
    displayCountryName(/* insert your custom value here */);
  } else {
    displayCountryName(country_name);
  }

Или полностью:

function runOnLoad() {
    const displayCountryName = str => $("#country_name").text(str);
    $.get("https://api.ipdata.co?api-key=6e6bf80b946bedd9daf3c7f799b44683b22333501994fa8af57ce0fa", function (response) {
      const { country_name } = response;
      if (country_name === 'Germany') {
        displayCountryName('Deutschland');
      } else if (!country_name) {
        displayCountryName(/* insert your custom value here */);
      } else {
        displayCountryName(country_name);
      }
    }, "jsonp");
}
if(document.readyState === "complete") {
    runOnLoad();
} else {
    window.addEventListener("onload", runOnLoad, false);
}

Если вы используете jQuery, вам не нужно проверять if / else для ReadyState - используйте $ вместо:

$(runOnLoad);

Пример Live:

function runOnLoad() {
  const displayCountryName = str => $("#country_name").text(str);
  $.get("https://api.ipdata.co?api-key=6e6bf80b946bedd9daf3c7f799b44683b22333501994fa8af57ce0fa", function(response) {
    const {
      country_name
    } = response;
    if (country_name === 'Germany') {
      displayCountryName('Deutschland');
    } else if (!country_name) {
      displayCountryName( /* insert your custom value here */ );
    } else {
      displayCountryName(country_name);
    }
  }, "jsonp");
}
$(runOnLoad);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="country_name"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...