打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

用户: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 class="no-results"></div>
             </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">${song.aliases.join('、')}</span>`
            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 class="no-results">输入关键词进行搜索</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() : '')
            const titleMatch = song.title.toLowerCase().includes(searchText)
             if (song.aliases && song.aliases.length > 0) {
             // 检查别名匹配
                song.aliases.forEach(function (alias) {
            const aliasMatches = song.aliases.filter(function (alias) {
                    maxScore = Math.max(maxScore, getMatchScore(searchText, alias.toLowerCase()))
                return alias.toLowerCase().includes(searchText)
                })
            })
             }
             // 计算权重
            let score = 0
            if (titleMatch) score += 2  // 标题权重
            score += aliasMatches.length * 3  // 别名权重
             return {
             return {
                 song: song,
                 song: song,
                 score: score
                 score: maxScore
             }
             }
         }).filter(function (result) {
         }).filter(function (result) {
            // const resc = 2
             // 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 >= 2  // 过滤掉不匹配的
             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 class="no-results">没有找到匹配的曲目</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">' + result.song.title + '</div>' +
                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的版本

搜索结果:

别名列表: