28.08.2017, 07:37
|
Аспирант
|
|
Регистрация: 25.06.2017
Сообщений: 36
|
|
Как изменить путь в style="background:url('XXX');"
Есть код:
$('*', div).each(function (i,el) {
var bg = $(this).css('background').replace('url(','').replace(')','').replace(/\"/gi, "");
var srcValUrl= bg.substr(bg.lastIndexOf("/")+1,bg.length);
$(this).css("background","{{ asset('layers/'. $template_folder .'/img/' "+ srcValUrl +" ') }}");
});
На выходе изменения не появляются - путь не меняется. Понимаю, что проблема в переменной bg и если бы без нее, то нормально бы было, как под спойлером.
$('img', div).each(function (i,el) {
var srcVal=el.src.substr(el.src.lastIndexOf("/")+1,el.src.length);
$(this).attr("src","{{ asset('layers/'. $template_folder .'/img/" + srcVal + "') }}");
});
Но под спойлером селектор выбирает тег, который имеет уже путь, а в случае с аттрибутом сложнее немного. Сообразить не могу на jQuery. Либо изначально селектор по-другому настроить, либо вывод настроить надо.
Спасибо за подсказку.
|
|
28.08.2017, 08:43
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,225
|
|
Сообщение от Stenli
|
Понимаю, что проблема в переменной bg
|
Так ты потестируй по шагам и посмотришь, что именно у тебя происходит.
|
|
28.08.2017, 09:59
|
Аспирант
|
|
Регистрация: 25.06.2017
Сообщений: 36
|
|
Ставил алерты - все попадает куда надо, а вот положить не могу в то же место, откуда взял.
|
|
28.08.2017, 10:22
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от Stenli
|
Ставил алерты - все попадает куда надо, а вот положить не могу в то же место, откуда взял.
|
макет или ссылку бы неплохо
|
|
28.08.2017, 10:40
|
Аспирант
|
|
Регистрация: 25.06.2017
Сообщений: 36
|
|
Что значит макет?
Чтобы не тянуть, приложил на всяк случай HTML и полный JS
$(document).ready(function() {
var Final = '';
$('#sendTo').on('click', function () {
//var insertData = $('#insertArea').val();
var bodyVal = $('#insertArea').val();
bodyVal = bodyVal.substring(bodyVal.indexOf('<body>')+6, bodyVal.lastIndexOf('</body>')).trim();
var div = $("<div>", {html : bodyVal});
// find and replace all href links
$('a', div).attr("href","{{ $test }}");
// find and replace all img
$('img', div).each(function (i,el) {
var srcVal=el.src.substr(el.src.lastIndexOf("/")+1,el.src.length);
$(this).attr("src","{{ asset('layers/'. $template_folder .'/img/" + srcVal + "') }}");
});
// find and replace all URL in styles
$('*', div).each(function (i,el) {
var bg = $(this).css('background').replace('url(','').replace(')','').replace(/\"/gi, "");
var srcValUrl= bg.substr(bg.lastIndexOf("/")+1,bg.length);
$(this).css("background","{{ asset('layers/'. $template_folder .'/img/' "+ srcValUrl +" ') }}");
});
// delete tag script, iframe, noscript with content
$('script', div).empty();
$('noscript', div).empty();
$('iframe', div).empty();
$('script', div).remove();
$('noscript', div).remove();
$('iframe', div).remove();
Final += "@include('layers.header')\n<body>\n" + div.html().trim() + "\n@include('layers.footer')";
$('#pastArea').val(Final);
});
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="assets/css/bootstrap/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="assets/css/main.css">
<script type="text/javascript" src="assets/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="assets/js/bootstrap.min.js"></script>
<script type="text/javascript" src="assets/js/preland.js"></script>
<title></title>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-4" style="padding: 10px; font-size: 12px; background-color: cornflowerblue; color: #fff; height: 100%;">
<div class="col-lg-8">
<label>Введите html-текст, который нужно адаптировать (правая кнопка мыши + вставить или Ctrl+V)</label>
<textarea class="form-control" name="insertArea" id="insertArea" cols="80" rows="15"></textarea>
</div>
<div class="text-center" >
<button style="margin-top: 10px;" type="button" name="sendTo" value="Send to" id="sendTo" class="btn btn-success">Адаптировать</button>
</div>
<div class="col-lg-8" style="margin-top: 10px;">
<label>Скопируйте/вырежьте адаптированный html-текст (правая кнопка мыши + копировать или Ctrl+C/X)</label>
<textarea class="form-control" name="pastArea" id="pastArea" cols="80" rows="15"></textarea>
</div>
<br>
<!--<form>
<div class="text-center">
<input style="margin-top: 10px;" type="text" name="domainConvert" id="domenConvert"/>
</div>
<div class="text-center">
<input style="margin-top: 10px;" type="text" name="domainConvert" id="domenGet"/>
</div>
<br>
</form>-->
</div>
</div>
</body>
</html>
Последний раз редактировалось Stenli, 28.08.2017 в 10:43.
|
|
28.08.2017, 10:46
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,225
|
|
Сообщение от Stenli
|
Что значит макет?
|
Это маленький тестовый пример на котором можно было бы посмотреть проблему.
Сообщение от Stenli
|
приложил на всяк случай HTML и полный JS
|
Это не получится запустить. Пример должен быть чем проще - тем лучше.
|
|
28.08.2017, 13:46
|
Аспирант
|
|
Регистрация: 25.06.2017
Сообщений: 36
|
|
Спасибо за разъяснение на счет макета.
В один HTML поместил. Под спойлером. Два поля: в верхнее вставляет некоторый код, после нажатия кнопки, в нижнем появляется результат после обработки.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" src="assets/js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<title></title>
</head>
<body>
<div class="container">
<div class="row">
<div>
<label>Поле, откуда скрипт берет данные для обработки</label>
<textarea class="form-control" name="insertArea" id="insertArea" cols="80" rows="15"></textarea>
</div>
<div class="text-center" >
<button type="button" name="sendTo" value="Send to" id="sendTo" class="btn btn-success">Кнопка</button>
</div>
<div>
<label>Поле, куда скрипт кладет обработанные данные</label>
<textarea name="pastArea" id="pastArea" cols="80" rows="15"></textarea>
</div>
<br>
</div>
</div>
<script>
var Final = '';
$('#sendTo').on('click', function () {
var bodyVal = $('#insertArea').val();
var div = $("<div>", {html : bodyVal});
$('*', div).each(function (i,el) {
var bg = $(this).css('background').replace('url(','').replace(')','').replace(/\"/gi, "");
var srcValUrl= bg.substr(bg.lastIndexOf("/")+1,bg.length);
$(this).css("background","{{ asset('layers/'. $template_folder .'/img/' "+ srcValUrl +" ') }}");
});
Final += div.html().trim();
$('#pastArea').val(Final);
});
</script>
</body>
</html>
Можно попробовать с такими вводными:
<span style="background: url('https://yastatic.net/morda-logo/i/citylogos/yandex_no1-logo-ru.png');"></span>
На выходе ожидаю:
<span style="background: url('{{ asset('layers/'. $template_folder .'/img/' yandex_no1-logo-ru.png') }}');"></span>
Подозреваю, что нужно примерно в этом русле думать на 31-й стр: $('*', div).css('background').each(function (i,el)
Последний раз редактировалось Stenli, 28.08.2017 в 13:57.
|
|
28.08.2017, 13:58
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,225
|
|
Сообщение от Stenli
|
Можно попробовать с такими вводными:
<span style="background: url('https://yastatic.net/morda-logo/i/citylogos/yandex_no1-logo-ru.png');"></span>
На выходе ожидаю:
<span style="background: url('{{ asset('layers/'. $template_folder .'/img/' yandex_no1-logo-ru.png') }}');"></span>
|
Не совсем понятна проблема...
Нужно строчку
"background: url('https://yastatic.net/morda-logo/i/citylogos/yandex_no1-logo-ru.png');"
Заменить на строку
"background: url('{{ asset('layers/'. $template_folder .'/img/' yandex_no1-logo-ru.png') }}');"
?
|
|
28.08.2017, 14:48
|
Аспирант
|
|
Регистрация: 25.06.2017
Сообщений: 36
|
|
Да, верно
|
|
28.08.2017, 15:15
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,225
|
|
Дык!
<span style="background: url('https://yastatic.net/morda-logo/i/citylogos/yandex_no1-logo-ru.png');"></span>
<script type='text/javascript'>
var o=document.getElementsByTagName('span')[0];
val="background: url('{{ asset('layers/'. $template_folder .'/img/' yandex_no1-logo-ru.png') }}');";
o.setAttribute('style',val);
</script>
Вот в консоли получается
<span style="background: url('{{ asset('layers/'. $template_folder .'/img/' yandex_no1-logo-ru.png') }}');"></span>
|
|
|
|