💭
階層多すぎ要素もりもりの致死量HTMLを編集するためのツールを作りました。
以下編集したいもの
<!-- begin post -->
<div class="card">
<a href="post.html">
<img class="img-fluid" src="assets/img/demopic/5.jpg" alt="">
</a>
<div class="card-block">
<h2 class="card-title"><a href="post.html">SUBTITLE</a></h2>
<h4 class="card-text">SETUMEIBUN</h4>
<div class="metafooter">
<div class="wrapfooter">
<span class="meta-footer-thumb">
<a href="author.html"><img class="author-thumb" src="https://www.gravatar.com/avatar/e56154546cf4be74e393c62d1ae9f9d4?s=250&d=mm&r=x" alt="Sal"></a>
</span>
<span class="author-meta">
<span class="post-name"><a href="author.html">Sal</a></span><br/>
<span class="post-date">22 July 2017</span><span class="dot"></span><span class="post-read">6 min read</span>
</span>
<span class="post-read-more"><a href="post.html" title="Read Story"><svg class="svgIcon-use" width="25" height="25" viewbox="0 0 25 25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 0 0 .706.03L12.5 16.85l5.662 4.126a.508.508 0 0 0 .708-.03.5.5 0 0 0 .118-.285H19V6zm-6.838 9.97L7 19.636V6c0-.55.45-1 1-1h9c.55 0 1 .45 1 1v13.637l-5.162-3.668a.49.49 0 0 0-.676 0z" fill-rule="evenodd"></path></svg></a></span>
</div>
</div>
</div>
</div>
<!-- end post -->
致死量です。。。
orz
.
.
.
なので、複数置換エディタを作成しました。
説明文のところを適当なわかりやすい文字列に変えておき、それを置換して編集するようにする。
そうすれば、致死量のHTMLを見て倒れることがなくなると考え作成しました。
初めは、HTML解析機でも作ろうかと悩みましたが、これで落ち着きました。
以下全文
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テキスト一括置換ツール</title>
<style>
.container {
max-width: 800px;
margin: 20px auto;
padding: 20px;
font-family: Arial, sans-serif;
}
.section {
margin-bottom: 20px;
padding: 15px;
background: #f5f5f5;
border-radius: 5px;
}
.rule-row {
display: flex;
gap: 10px;
margin-bottom: 10px;
}
input[type="text"] {
flex: 1;
padding: 8px;
border: 1px solid #ddd;
border-radius: 4px;
}
button {
padding: 8px 15px;
background: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background: #0056b3;
}
.remove-btn {
background: #dc3545;
}
.remove-btn:hover {
background: #c82333;
}
textarea {
width: 100%;
height: 150px;
padding: 10px;
margin: 10px 0;
border: 1px solid #ddd;
border-radius: 4px;
resize: vertical;
}
</style>
</head>
<body>
<div class="container">
<div class="section">
<h3>ベーステキスト</h3>
<textarea id="base-input" placeholder="置換対象のベーステキストを入力してください"></textarea>
</div>
<div class="section">
<h3>置換ルール</h3>
<div id="rules-container">
<!-- ルール行がここに追加されます -->
</div>
<button id="add-rule">ルールを追加</button>
</div>
<button id="execute-button">実行</button>
<div class="section">
<h3>結果</h3>
<textarea id="output" readonly></textarea>
</div>
</div>
<script>
// ルール追加ボタン
document.getElementById('add-rule').addEventListener('click', () => {
const ruleRow = document.createElement('div');
ruleRow.className = 'rule-row';
const fromInput = document.createElement('input');
fromInput.type = 'text';
fromInput.placeholder = '置換前の文字列';
const toInput = document.createElement('input');
toInput.type = 'text';
toInput.placeholder = '置換後の文字列';
const removeBtn = document.createElement('button');
removeBtn.textContent = '削除';
removeBtn.className = 'remove-btn';
removeBtn.onclick = () => ruleRow.remove();
ruleRow.appendChild(fromInput);
ruleRow.appendChild(toInput);
ruleRow.appendChild(removeBtn);
document.getElementById('rules-container').appendChild(ruleRow);
});
// 実行ボタン
document.getElementById('execute-button').addEventListener('click', () => {
const baseText = document.getElementById('base-input').value;
const rules = Array.from(document.getElementsByClassName('rule-row'))
.map(row => {
const inputs = row.getElementsByTagName('input');
return {
from: inputs[0].value,
to: inputs[1].value
};
});
let result = baseText;
for (const rule of rules) {
result = result.split(rule.from).join(rule.to);
}
document.getElementById('output').value = result;
});
// 初期ルールを1つ追加
document.getElementById('add-rule').click();
</script>
</body>
</html>
Discussion