#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>
Комментарии:
1. Спасибо за ваш ответ. Версия jquery работает и меняет «Закрыто» на «Финансируется». Однако это никак не влияет на статус «Продано».
2. Вы имеете в виду, что вы действительно пробовали это на своей странице? Если да… Скажите мне, есть ли это
SOLD
, илиSold
или, может быть, с пробелом.. нравитсяSOLD
? — Вы пробовали решение PHP?3. Привет, да, я внедрил версию jquery на веб-сайте. Сам word продан. И там нет пробела. Я не пробовал версию PHP.
4. ОК… Я добавил
.trim()
функцию, чтобы убедиться, что пробелов нет, и.toUpperCase()
сравнить слова. Таким образом, если в базе данных есть какие-то «варианты», сравнение сработает.