Ответ 1
Вы можете просто изменить способ его вывода, но это довольно просто сделать с JavaScript
var p = document.querySelector(".prettyprint");
p.textContent = p.textContent.replace(/^\s+/mg, "");
В настоящее время у меня есть следующий html в блоке предварительного кода:
<pre class="prettyprint"><code>
<html>
<body>
<form name="input" action="html_form_action.asp" method="get">
<input type="radio" name="sex" value="male">Male<br>
<input type="radio" name="sex" value="female">Female<br>
<input type="submit" value="Submit">
</form>
<p>If you click the "Submit" button, the form-data will be sent to a page called "html_form_action.asp".</p>
</body>
</html>
</code></pre>
Отступы внутри источника html для лучшей структуры внутри документа. Как удалить ведущие пробелы? С помощью javascript или есть более простой метод.
Вы можете просто изменить способ его вывода, но это довольно просто сделать с JavaScript
var p = document.querySelector(".prettyprint");
p.textContent = p.textContent.replace(/^\s+/mg, "");
В вопросе спрашивается, есть ли решение JavaScript или более простой метод для удаления ведущих пробелов. Там более простой метод:
CSS
pre, code {
white-space: pre-line;
}
Свойство
white-space
используется для описания того, как пробелы внутри элемент обрабатывается.предварительно линии
Последовательности пробелов сбрасываются.
Мне очень нравится идея Хомама, но мне пришлось изменить ее, чтобы справиться с этим:
<pre><code><!-- There nothing on this line, so the script thinks the indentation is zero -->
foo = bar
</code></pre>
Чтобы исправить это, я просто вынимаю первую строку, если она пуста:
[].forEach.call(document.querySelectorAll('code'), function($code) {
var lines = $code.textContent.split('\n');
if (lines[0] === '')
{
lines.shift()
}
var matches;
var indentation = (matches = /^[\s\t]+/.exec(lines[0])) !== null ? matches[0] : null;
if (!!indentation) {
lines = lines.map(function(line) {
line = line.replace(indentation, '')
return line.replace(/\t/g, ' ')
});
$code.textContent = lines.join('\n').trim();
}
});
(Я также обрабатываю теги <code>
вместо тегов <pre>
).
Расширение указанного решения, этот фрагмент предполагает, что отступ первой строки внутри <pre>
равен 0, и он перенастраивает все строки на основе первой строки:
[].forEach.call(document.querySelectorAll('pre'), function($pre) {
var lines = $pre.textContent.split('\n');
var matches;
var indentation = (matches = /^\s+/.exec(lines[0])) != null ? matches[0] : null;
if (!!indentation) {
lines = lines.map(function(line) {
return line.replace(indentation, '');
});
return $pre.textContent = lines.join('\n').trim();
}
});
Когда вы используете pre
, вы должны отформатировать его содержимое в точности так, как вы хотите, чтобы оно отображалось. Это сама идея pre
(предварительно отформатированный текст). Но если это просто отступы, вы можете использовать CSS: margin-left
с подходящим отрицательным значением.
Отличное @voltrevo! Это именно то, что я хочу, спасибо за акцию.