Замена текста внутри HTML-элемента с помощью jQuery

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть шаблон страницы, который использует PHP для извлечения данных с внешнего веб-сайта и использует HTML для отображения макета страницы.

Некоторые извлекаемые данные не могут быть изменены в источнике. Поэтому мне нужно изменить его на самом веб-сайте по мере его отображения.

Данные, которые мне нужно изменить, по сути, являются «статусом». И кодируется следующим образом:

 <span id="property-status"><?php echo $property['status']; ?></span>
  

Существует три типа состояния, поступающего из источника, и они:

ПРОДАНО, ЗАКРЫТО и АКТИВНО

Мне нужно изменить ПРОДАНО и ЗАКРЫТО на ФИНАНСИРУЕМОЕ.

Вопрос в том, как мне достичь этого с помощью jQuery, когда разработчики не могут изменить его со своей стороны.

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

1. $('#property-status').text('your value here')

Ответ №1:

If — строка .Попробуйте использовать регулярное выражение />(.*?)</gmi и String.replace() функцию

 var obj ={'sold':'found','closed':'found'};

var a ='<span id="property-status">CLOSED</span>';

var res = a.replace(/>(.*?)</gmi,((a,b)=> '>' obj[b.toLowerCase()] '<'));
console.log(res)  

Или с помощью html trim() удалите ненужное пространство

 var obj ={'sold':'found','closed':'found'};
 $('#property-status').text(obj[$('#property-status').text().trim().toLowerCase()])  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span id="property-status">sold </span>  

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

1. Я внедрил html-версию, но по какой-то причине в ней меняется только слово «закрыто», но не слово «продано».

2. Все еще получаем тот же результат.

3. вставьте отрисованный вами тег span.без php

Ответ №2:

Конечно, вы можете сделать это на стороне клиента, сравнив текст элемента, как показано ниже:

 $(document).ready(function() {

  // Your element 
  var status = $("#property-status");
  // It's text without spaces and to uppercase, for the comparison
  var status_text = status.text().trim().toUpperCase();

  if (status_text == "SOLD" || status_text == "CLOSED") {
    status.text("FUNDED");
  }
});  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<span id="property-status">Sold</span>  


Но!… Вы также могли бы сделать это на стороне сервера, с помощью функции PHP:

 <?php
function fixStatus($status){

  // Text without space and to uppercase
  $status_to_compare = trim(strtoupper(status));

  if($status_to_compare=="CLOSED" || $status_to_compare=="SOLD"){
    return "FUNDED";
  }else{
    return $status;
  }
}
?>

<span id="property-status"><?php echo fixStatus($property['status']); ?></span>
  

PHPFiddle

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

1. Спасибо за ваш ответ. Версия jquery работает и меняет «Закрыто» на «Финансируется». Однако это никак не влияет на статус «Продано».

2. Вы имеете в виду, что вы действительно пробовали это на своей странице? Если да… Скажите мне, есть ли это SOLD , или Sold или, может быть, с пробелом.. нравится SOLD ? — Вы пробовали решение PHP?

3. Привет, да, я внедрил версию jquery на веб-сайте. Сам word продан. И там нет пробела. Я не пробовал версию PHP.

4. ОК… Я добавил .trim() функцию, чтобы убедиться, что пробелов нет, и .toUpperCase() сравнить слова. Таким образом, если в базе данных есть какие-то «варианты», сравнение сработает.