#javascript #html #css #select
Вопрос:
В приведенном ниже примере у меня есть поле выбора, в котором для каждого сделанного выбора отображается ссылка
function AbrirSecao(secao) {
let display = document.getElementById('content')
display.textContent = secao
}
<select name="unidade" id="unidade" onChange="AbrirSecao(this.value)">
<option value="">Selecione sua Cidade</option>
<option value="http://www.google.com.br#one">Sua Cidade 1</option>
<option value="http://www.google.com.br#two">Sua Cidade 2</option>
</select>
<p id="content"></p>
Вместо этого мне нужно было, чтобы при выборе опции страница загружала содержимое внешней страницы, как показано ниже:
<h1>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus vehicula
tortor metus, laoreet condimentum urna aliquet vitae. Aliquam eu felis
malesuada, maximus risus nec, aliquet leo</p>
Ответ №1:
Если веб-сайты, с которых вы хотите загружать данные, не находятся в том же домене, что и ваш, вы будете заблокированы в соответствии с политикой CORS.
Если у вас есть контроль над серверами веб-сайтов, с которых вам нужно получать контент, вы можете использовать функцию fetch():
https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
Подробнее о CORS: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
Вот пример использования функции fetch() https://jsfiddle.net/v4uL0na2/ Второй вариант возвращает HTML с домашней страницы JSFiddle. Второй вариант приводит к ошибке из-за CORS.
function AbrirSecao(secao) {
let display = document.getElementById('content')
fetch(secao).then(function(response) {
// The API call was successful!
return response.text();
}).then(function(html) {
// This is the HTML from our response as a text string
var parser = new DOMParser();
var doc = parser.parseFromString(html, 'text/html');
const element = doc.querySelector('body > *');
display.appendChild(element);
}).catch(function(err) {
// There was an error
console.warn('Something went wrong.', err);
});
}
<select name="unidade" id="unidade" onChange="AbrirSecao(this.value)">
<option value="">Selecione sua Cidade</option>
<option value="/">jsfiddle</option>
<option value="http://www.google.com.br#two">Sua Cidade 2</option>
</select>
<p id="content"></p>
(Приведенный выше пример кода здесь работать не будет)
Комментарии:
1. это подстраницы одного и того же сайта. Есть ли другие способы сделать это, кроме извлечения?
2. Выборка кажется подходящим инструментом для этого. Есть ли проблема с выборкой?
3. нет проблем, но как это адаптировать в выборе?
4. Я только что обновил ответ, включая пример.
5. Мне удалось реализовать его на сайте, но когда я запускаю его в браузере, появляется сообщение об ошибке, в котором говорится, что схема URL «файл» не поддерживается. Будет ли этот процесс работать только при запуске на сервере?
Ответ №2:
с помощью Jquery используйте load(), это просто..
$('#siteloader').load('http://www.your-link.com');
function AbrirSecao(secao) {
$('#content').load(secao);
}
Ванилайи используют fetch. попробуйте это :
function AbrirSecao(secao) {
fetch(secao)
.then(function(response) {
return response.text();
})
.then(function(body) {
document.querySelector('#content').innerHTML = body;
});
}
Комментарии:
1. Как мне изменить раздел и тоже переключиться на поддомен? например, я выбираю опцию «Не выбирать» на главной странице your-link.com, и после выбора загрузите раздел ниже и в поддомен your-link.com/suddomain