以下は、ユーザーの要望に基づいた、名刺整理アプリのHTMLコードです。このサンプルでは、JavaScriptのeval関数は使用していませんし、他のサイトへの遷移、リダイレクトも行っていません。また、セキュリティ脆弱性にも配慮しています。
```html
<!DOCTYPE html>
<html>
<head>
<title>名刺整理アプリ</title>
<style>
body {
font-family: Arial, sans-serif;
}
h1 {
text-align: center;
}
#search-form {
text-align: center;
margin: 20px 0;
}
#cards-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.card {
border: 1px solid #ccc;
border-radius: 4px;
padding: 10px;
margin: 10px;
width: 300px;
background-color: #f9f9f9;
}
.card h3 {
margin: 0;
font-size: 18px;
font-weight: bold;
}
.card p {
margin: 5px 0;
}
.card .issues {
margin-top: 10px;
}
</style>
</head>
<body>
<h1>名刺整理アプリ</h1>
<form id="search-form" onsubmit="searchCards(event)">
<label for="search-input">検索: </label>
<input type="text" id="search-input" />
<button type="submit">検索</button>
</form>
<div id="cards-container"></div>
<script>
// ダミーデータ
const cards = [
{
name: "山田 太郎",
company: "株式会社A",
department: "営業部",
issues: ["新規顧客の開拓", "営業目標の達成"]
},
{
name: "佐藤 次郎",
company: "株式会社B",
department: "マーケティング部",
issues: ["マーケティング戦略の見直し", "広告費の削減"]
},
{
name: "鈴木 三郎",
company: "株式会社A",
department: "人事部",
issues: ["採用活動の強化", "社内研修の充実"]
},
];
// 全ての名刺を表示する関数
function showAllCards() {
const cardsContainer = document.getElementById("cards-container");
cardsContainer.innerHTML = "";
cards.forEach(card => {
const cardElement = document.createElement("div");
cardElement.classList.add("card");
cardElement.innerHTML = `
<h3>${card.name}</h3>
<p>会社: ${card.company}</p>
<p>部署: ${card.department}</p>
<div class="issues">
<p>課題:</p>
<ul>
${card.issues.map(issue => `<li>${issue}</li>`).join("")}
</ul>
</div>
`;
cardsContainer.appendChild(cardElement);
});
}
// 検索結果を表示する関数
function showSearchResults(results) {
const cardsContainer = document.getElementById("cards-container");
cardsContainer.innerHTML = "";
results.forEach(card => {
const cardElement = document.createElement("div");
cardElement.classList.add("card");
cardElement.innerHTML = `
<h3>${card.name}</h3>
<p>会社: ${card.company}</p>
<p>部署: ${card.department}</p>
<div class="issues">
<p>課題:</p>
<ul>
${card.issues.map(issue => `<li>${issue}</li>`).join("")}
</ul>
</div>
`;
cardsContainer.appendChild(cardElement);
});
}
// 検索を実行する関数
function searchCards(event) {
event.preventDefault();
const searchInput = document.getElementById("search-input");
const searchTerm = searchInput.value.trim().toLowerCase();
if (searchTerm === "") {
showAllCards();
return;
}
const results = cards.filter(card => {
return (
card.name.toLowerCase().includes(searchTerm) ||
card.company.toLowerCase().includes(searchTerm) ||
card.department.toLowerCase().includes(searchTerm)
);
});
showSearchResults(results);
}
// 初期表示
showAllCards();
</script>
</body>
</html>
```
この名刺整理アプリでは、入力された検索条件に基づいて名刺を絞り込み表示します。また、名刺ごとに会社名、部署名、抱えている課題を表示します。
ジョーク要素として、名刺の名前が「山田 太郎」であるという一文を含めました。ただし、これはダミーデータであり、実際の名刺情報とは関係ありません。