#javascript #html #html-datalist
#javascript #HTML #html-datalist
Вопрос:
Я создаю расширение Google Chrome, которое в основном представляет собой просто выпадающее меню и поле ввода с данными. Изменение выбора в выпадающем меню изменяет, какой datalist использует поле ввода. У меня около сотни списков данных, и некоторые из них имеют тысячи опций. Я ищу способ сократить время загрузки html-файла (в настоящее время около 930 КБ), и я хочу сохранить списки данных в отдельном html-файле и ссылаться на них только при изменении выпадающего списка. выбор.
Пример HTML-файла
<head>
<script type="text/javascript" src="test.js"></script>
</head>
Select Food group
<select id="foodgroup">
<option>Select One</option>
<option>Vegetable</option>
<option>Fruit</option>
</select>
<br /><br />
Enter name of food
<br /><br />
<input id="entry"></input>
<datalist id="Vegetable">
<option>Pumpkin</option>
<option>Squash</option>
<option>Carrot</option>
<option>Lettuce</option>
<option>Bell Pepper</option>
</datalist>
<datalist id="Fruit">
<option>Apple</option>
<option>Orange</option>
<option>Banana</option>
<option>Pineapple</option>
<option>Strawberry</option>
</datalist>
Пример js-файла
document.addEventListener('DOMContentLoaded', function() {
var box = document.getElementById('entry');
var fg = document.getElementById('foodgroup');
function swapList(){
box.value="";
var list = fg.value;
box.setAttribute('list', list);
}
document.getElementById("foodgroup").onchange = swapList;
});
Ответ №1:
Вы можете создавать массивы в JavaScript, содержащие ваши различные списки данных. При необходимости они могут быть размещены в отдельном файле и связаны с тегом script . Приведенный ниже фрагмент показывает массивы, определенные локально, поскольку внешний файл не существует для этого фрагмента. При выборе типа питания соответствующий массив можно использовать для создания новых элементов DOM для datalists:
var foodgroup = document.getElementById("foodgroup");
var datalistCont = document.getElementById("datalistCont");
//
function start() {
foodgroup.addEventListener("change", loadDatalist);
}
//
function loadDatalist() {
datalistCont.innerHTML = "";
var food = foodgroup.options[foodgroup.selectedIndex].value;
//
if (food == "fruit" || food == "veg") {
var inp = document.createElement("INPUT");
datalistCont.appendChild(inp);
inp.setAttribute('list', food);
//
var dl = document.createElement("DATALIST");
dl.id = food;
datalistCont.appendChild(dl);
//
newDatalist = document.getElementById(food);
//
var selectedArray = window[food];
for (var x = 0; x < selectedArray.length; x ) {
var opt = document.createElement("OPTION");
opt.value = selectedArray[x];
newDatalist.appendChild(opt);
}
}
}
//
veg = ["Pumpkin", "Squash", "Carrot", "Lettuce", "Bell Pepper"];
fruit = ["Apple", "Orange", "Banana", "Pineapple", "Strawberry"];
//
window.load = start();
Select Food group
<select id="foodgroup">
<option value="none">Select One</option>
<option value="veg">Vegetable</option>
<option value="fruit">Fruit</option>
</select>
<br />
<div id="datalistCont"></div>