用户:RedDragon/Test:修订间差异
来自Rizline中文维基
更多操作
小 |
小 |
||
| 第8行: | 第8行: | ||
<button id="alias-btn" | <button id="alias-btn" | ||
style="padding: 0.5rem 1rem; background: #3366CC; color: #ffffff; font-size: 16px; border: none; border-radius: 0 5px 5px 0">搜索</button> | style="padding: 0.5rem 1rem; background: #3366CC; color: #ffffff; font-size: 16px; border: none; border-radius: 0 5px 5px 0">搜索</button> | ||
</div> | |||
<div style="display: flex; justify-content: center; align-items: center; margin-top: 1.5rem;"> | |||
<label for="score-filter" style="margin-right: 0.5rem;">筛选匹配度 ≥</label> | |||
<input type="number" id="score-filter" value="2" min="1" max="100" style="width: 4rem; padding: 0.3rem;"> | |||
</div> | </div> | ||
<div style="margin-top: 100px"> | <div style="margin-top: 100px"> | ||
<h3>搜索结果:</h3> | <h3>搜索结果:</h3> | ||
<div id="alias-results" style="color: #333"> | <div id="alias-results" style="color: #333"> | ||
</div> | </div> | ||
</div> | </div> | ||
| 第37行: | 第40行: | ||
songlist.forEach(function (song) { | songlist.forEach(function (song) { | ||
const li = document.createElement('li') | const li = document.createElement('li') | ||
li.innerHTML = `<span class="song-title">${song.title}</span>: <span class="aliases">${ | let aliasText = song.aliases && song.aliases.length > 0 ? song.aliases.join('、') : '<span style="color:#888">无别名</span>' | ||
li.innerHTML = `<span class="song-title">${song.title || ''}</span>: <span class="aliases">${aliasText}</span>` | |||
container.appendChild(li) | container.appendChild(li) | ||
}) | }) | ||
} | |||
//计算匹配度,输入的每个字符只能在目标字符串中匹配一次,必须按顺序,每匹配一个字符加1分 | |||
function getMatchScore(input, target) { | |||
if (!input || !target) return 0 | |||
input = input.toLowerCase() | |||
target = target.toLowerCase() | |||
if (input === target) return 100 | |||
let score = 0 | |||
let pos = 0 | |||
for (let i = 0; i < input.length; i++) { | |||
let found = false | |||
for (let j = pos; j < target.length; j++) { | |||
if (input[i] === target[j]) { | |||
score += 1 | |||
pos = j + 1 | |||
found = true | |||
break | |||
} | |||
} | |||
if (!found) break | |||
} | |||
return score | |||
} | } | ||
| 第45行: | 第74行: | ||
const searchText = document.getElementById('alias-input').value.trim().toLowerCase() | const searchText = document.getElementById('alias-input').value.trim().toLowerCase() | ||
const resultsContainer = document.getElementById('alias-results') | const resultsContainer = document.getElementById('alias-results') | ||
const resc = Number(document.getElementById('score-filter').value) || 2 | |||
if (!searchText) { | if (!searchText) { | ||
resultsContainer.innerHTML = '<div | resultsContainer.innerHTML = '<div>输入关键词进行搜索</div>' | ||
return | return | ||
} | } | ||
const results = songlist.map(function (song) { | const results = songlist.map(function (song) { | ||
let maxScore = getMatchScore(searchText, song.title ? song.title.toLowerCase() : '') | |||
if (song.aliases && song.aliases.length > 0) { | |||
song.aliases.forEach(function (alias) { | |||
maxScore = Math.max(maxScore, getMatchScore(searchText, alias.toLowerCase())) | |||
}) | |||
} | |||
return { | return { | ||
song: song, | song: song, | ||
score: | score: maxScore | ||
} | } | ||
}).filter(function (result) { | }).filter(function (result) { | ||
// if (result.score >= resc) { | // if (result.score >= resc) { | ||
// console.log(result.song.title + ": " + result.score) | // console.log(result.song.title + ": " + result.score) | ||
// } | // } | ||
return result.score >= | return result.score >= resc | ||
}).sort(function (a, b) { | }).sort(function (a, b) { | ||
return b.score - a.score | return b.score - a.score | ||
}) | }) | ||
if (results.length == 0) { | if (results.length == 0) { | ||
resultsContainer.innerHTML = '<div | resultsContainer.innerHTML = '<div>没有找到匹配的曲目</div>' | ||
} else { | } else { | ||
resultsContainer.innerHTML = '' | resultsContainer.innerHTML = '' | ||
| 第86行: | 第110行: | ||
div.style.margin = "0 0 0.5rem 1rem" | div.style.margin = "0 0 0.5rem 1rem" | ||
div.style.lineHeight = "1.5" | div.style.lineHeight = "1.5" | ||
div.innerHTML = '<div class="song-title">' + | var songTitle = result.song.title || '' | ||
var link = '<a href="/' + encodeURIComponent(songTitle) + '/wiki" title="' + songTitle + '">' + songTitle + '</a>' | |||
div.innerHTML = '<div class="song-title">' + link + '</div>' + | |||
'<div class="aliases" style="font-size: 13px; margin-left: 1rem">alias: ' + | '<div class="aliases" style="font-size: 13px; margin-left: 1rem">alias: ' + | ||
result.song.aliases.join('、') + '</div>' | result.song.aliases.join('、') + '</div>' | ||
2025年9月12日 (五) 20:30的版本