добавить этот CSS для A5,
Вам просто нужно указать фиксированный размер
пример A5
@media print and (width: 14.8cm) and (height: 21cm) {
@page {
margin: 2cm;
}
}
/* style sheet for “letter” printing */
@media print and (width: 5.83in) and (height: 8.27in) {
@page {
margin: 1in;
}
}
/* A5 Landscape*/
@page {
size: A5 landscape;
margin: 10%;
}
/* A5 Landscape*/
@page {
size: A5 landscape;
margin: 10%;
}
Обычно у вас есть функция, которая может вызываться рекурсивно на всех узлах. Это действительно зависит от того, что вы хотите сделать с детьми. Если вы просто хотите собрать всех потомков, то лучшим вариантом может быть element.getElementsByTagName
.
var all = node.getElementsByTagName('*');
for (var i = -1, l = all.length; ++i < l;) {
removeTest(all[i]);
}
Вы можете использовать BFS, чтобы найти все элементы.
function(element) {
// [].slice.call() - HTMLCollection to Array
var children = [].slice.call(element.children), found = 0;
while (children.length > found) {
children = children.concat([].slice.call(children[found].children));
found++;
}
return children;
};
Эта функция возвращает всех дочерних элементов элемента.
function allDescendants (node) {
for (var i = 0; i < node.childNodes.length; i++) {
var child = node.childNodes[i];
allDescendants(child);
doSomethingToNode(child);
}
}
Вы перебираете все дочерние элементы, и для каждого элемента вы вызываете одну и ту же функцию, и она зацикливается на дочерних элементах этого элемента.
Если элементы создаются в цикле, вы должны оставить индекс через id = "" data-name или что-то еще. Затем вы можете индексировать их напрямую, что будет быстрее для большинства функций, таких как (! -F). Работает довольно хорошо для 1024 бит х 100 элементов в зависимости от того, что вы делаете.
if ( document.getElementById( cid ) ) {
return;
} else {
what you actually want
}
это будет быстрее в большинстве случаев, когда элементы уже загружены. только почистите страницу о перезагрузке или безопасных передачах доменов / логинах / cors, и вы делаете что-то дважды.
Самый простой способ сделать это в современных браузерах или с Babel - это. Скажем, у вас есть узел HTML $node
, чьи дети вы хотите переписать.
Array.prototype.forEach.call($node.querySelectorAll("*"), function(node) {
doSomethingWith(node);
});
querySelectorAll('*')
на любом узле DOM даст вам все дочерние узлы элемента в NodeList
. NodeList
является массивоподобным объектом, поэтому вы можете использовать Array.prototype.forEach.call
для итерации по этому списку, обрабатывая каждого потомка один за другим в обратном вызове.
Нет необходимости вызывать метод allDescendants для всех потомков, потому что сам метод уже делает это. Итак, удалите последний кодовый блок, и я думаю, что это правильное решение (á, а не thé =])
function removeTest(child){
if(hasClass(child, "lbExclude")){
child.parentNode.removeChild(child);
}
}
function allDescendants (node) {
for (var i = 0; i < node.childNodes.length; i++) {
var child = node.childNodes[i];
allDescendants(child);
removeTest(child);
}
}
var children = allDescendants(temp);
Если вы используете библиотеку js, это так просто:
$('.lbExclude').remove();
В противном случае, если вы хотите получить все элементы в узле, вы можете собрать их все изначально:
var nodes = node.getElementsByTagName('*');
for (var i = 0; i < nodes.length; i++) {
var n = nodes[i];
if (hasClass(n, 'lbExclude')) {
node.parentNode.removeChild(node);
}
}