Используйте массив имен листов и их сопоставление и forEach поверх них.
const sheetNames = ["Converting Fractions, Decimals and Percentages (1)",
"Converting Fractions, Decimals and Percentages (2)",
"Recall Mixed Division Facts",
"Recall 4x Table",
"Recall 3x Table",
"Recall Addition and Subtraction Facts within 20"]; // I am not typing them all in
const sourceSheets = sheetNames.map(name => ss.getSheetByName(name));
const targetsheet = ss.getSheetByName("All Responses");
const sourceRanges = sourceSheets.map(sourceSheet => sourceSheet.getSheetValues(2,1,sourcesheet.getLastRow(),21));
var thestring = "A1:Z";
var thelastrow = targetsheet.getLastRow();
var range = thestring+thelastrow;
if (thelastrow != 0) {
targetsheet.getRange(range).clearContent();
}
sourceRanges.forEach(sourceRange => {
targetsheet.getRange(targetsheet.getLastRow()+1, 1, sourceRange.length,21).setValues(sourceRange);
});
Вам нужно сделать родитель элемента видимым в течение этого очень короткого момента, пока вы получаете размеры элемента. В общем решении все предки обычно пересекаются и становятся видимыми. Затем их display
значения возвращаются к исходным.
Конечно, есть проблемы с производительностью.
Мы рассматривали этот подход в реализации Prototype.js, но в итоге getWidth
и getHeight
сделали видимым только фактический элемент без обхода предков.
Проблема с альтернативными решениями, такими как удаление элемента из «скрытого» родителя, заключается в том, что определенные стили могут больше не применяться к элементу, когда он выходит из «обычной» иерархии. Если у вас есть такая структура:
<div class="foo" style="display:none;">
<div class="bar">...</div>
</div>
и эти правила:
.bar { width: 10em; }
.foo .bar { width: 15em; }
, то удаление элемента из его родителя фактически приведет к неверным измерениям.
Сделано чистое решение js без Jquery и без клонирования (что, я думаю, быстрее)
var getHeight = function(el) {
var el_style = window.getComputedStyle(el),
el_display = el_style.display,
el_position = el_style.position,
el_visibility = el_style.visibility,
el_max_height = el_style.maxHeight.replace('px', '').replace('%', ''),
wanted_height = 0;
// if its not hidden we just return normal height
if(el_display !== 'none' && el_max_height !== '0') {
return el.offsetHeight;
}
// the element is hidden so:
// making the el block so we can meassure its height but still be hidden
el.style.position = 'absolute';
el.style.visibility = 'hidden';
el.style.display = 'block';
wanted_height = el.offsetHeight;
// reverting to the original values
el.style.display = el_display;
el.style.position = el_position;
el.style.visibility = el_visibility;
return wanted_height;
}
вот демо https://jsfiddle.net/xuumzf9k/1/
Пожалуйста, дайте мне знать, если вы можете найти какие-либо улучшения в этом (как я использую это в моих основных проектах)
Пока элемент не отрендерен, у него нет высоты. Даже если вы клонируете родительский объект и отображаете его где-то, что не видно пользователю, нет гарантии, что клон будет иметь такую же высоту, как и окончательный размер скрытого объекта.
Есть много вещей, которые могут повлиять на высоту, которые не обязательно будут отображаться в клоне - что-либо в DOM и его взаимодействие с правилами CSS может вызвать изменение в отображении любого другого элемента DOM. Если не считать клонирования всего документа (и даже если он не защищен от ошибок), у вас нет способа определить высоту скрытого объекта.
Если вы должны знать высоту, прежде чем она отобразится пользователю, вам придется «взломать» ее, отобразив ее как можно быстрее, а затем скрыть снова. Скорее всего, пользователь увидит этот сбой и не будет доволен результатом.
Вы можете клонировать элемент, абсолютно позиционировать его на -10000, -10000, измерить клон и уничтожить его.
Используйте z-index, чтобы скрыть элемент под непрозрачным элементом, показать его и получить высоту.
Таким образом, вы даже не можете изменить отображение : нет;
на height: 0; переполнение: скрыто;
? Возможно, вы могли бы переопределить это в своей собственной таблице стилей следующим образом:
div#parent { display: block !important; height:0; overflow:hidden; }
А затем, когда вы используете YUI (при условии YUI 2), вы можете использовать это:
var region = YAHOO.util.Dom.getRegion('child');
Чтобы получить размеры и смещение дочернего элемента.
Я уже рассматривал этот способ, но я не использовал его, потому что я боялся, что мне нужно держать мои модули чрезвычайно маленькими, потому что его невозможно связать один и тот же интерфейс дважды. Моя проблема в том, что если я хочу использовать интерфейс/класс/перечисление/что-либо из другой банки и что банка определила службы/* файл, я завинчен, потому что я не могу использовать содержимое банки, не загружая ее в качестве модуля.
Надеюсь, моя забота ясна.
-121--2486082-Я не уверен, будет ли это полезно для вас, но это был бы довольно простой способ сделать это, не уверен в точной «скорости» этого, хотя.
List<string> collection = new List<string>();
collection.Sort();
foreach(string value in collection)
{
if(value == "stringToLookFor")
{
return value;
}
{
-121--2681531- Мне пришлось сделать следующее:
Используя YUI 2, при загрузке страницы я обнаружил все элементы данного имени класса, которые были установлены для отображения: нет, или высота и ширина которых были равны 0 (это один из способов измерения того, существует ли элемент, или родительский элемент настроен для отображения: нет). Затем я задаю отображаемый элемент: блок. Потом я проверил его родителя на то же самое и показал родителям, пока он не нашел видимого родителя. Один раз наивысший дисплей: ни один предок не установлен для отображения: блок, я могу измерить мой элемент.
Как только все элементы измерены, я возвращаю все элементы обратно на дисплей: нет.
Вы попробовали это?
setTimeout('alert($(".Var").height());',200);