[javascript]如何添加 href 链接而不是替换段落中的一些最后字母

· 收录于 2024-01-06 16:49:07 · source URL

问题详情

我有一个问题,想得到帮助。
这是我的 HTML:

<div class="post--content">Lorem ipsum dolor sit amet,nconsectetur adipiscing.Lorem 
 vipsumdolor sit amet,nconsectetur adipiscing.Lorem ipsum dolor sit amet,nconsectetur  
 adipiscing.Lorem ipsum dolor sit amet,nconsectetur adipiscing.Lorem ipsum dolor sit  
 amet,nconsectetur adipiscing.</p>

<a href="link" target="_blank">Read more</a>

我的CSS:

.post--content {
    max-width: 300px;  
    line-height: 11.6px;  
    display: -webkit-box;  
    -webkit-line-clamp: 2;  
    -webkit-box-orient: vertical;  
    overflow: hidden;  
}

如果文本的大小超过宽度的两行,我想隐藏文本。然后在第二行的末尾动态设置我的 href 链接。此 href 链接会将用户带到整篇文章。这样做的目标是与文本的大小无关,始终将我的 href 链接放在此段落中。
https://codepen.io/DaroGawlik/pen/jOdgrbo?editors=1111

最佳回答

您可以为文本和链接创建一个容器,然后使用 JavaScript 动态计算第二行的位置并相应地附加链接。例:

[HTML全文]

<div class="post--container">
    <div class="post--content">Lorem ipsum dolor sit amet, consectetur adipiscing. Lorem ipsum dolor sit amet,
        consectetur adipiscing. Lorem ipsum dolor sit amet, consectetur adipiscing. Lorem ipsum dolor sit amet,
        consectetur adipiscing. Lorem ipsum dolor sit amet, consectetur adipiscing.
    </div>
    <a href="link" target="_blank" class="read-more">Read more</a>
</div>

CSS的

.post--container {
    max-width: 300px;
    position: relative;
}

.post--content {
    line-height: 11.6px;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.read-more {
    position: absolute;
    bottom: 0;
    right: 0;
    background-color: #f2f2f2;
    padding: 5px;
    text-decoration: none;
}

JS系列

document.addEventListener("DOMContentLoaded", function () {
    const container = document.querySelector(".post--container");
    const content = document.querySelector(".post--content");
    const readMore = document.querySelector(".read-more");

    const lineHeight = parseFloat(window.getComputedStyle(content).lineHeight);
    const maxLines = 2;

    const setLinkPosition = () => {
        const height = content.clientHeight;
        const lines = Math.round(height / lineHeight);

        if (lines > maxLines) {
            readMore.style.top = `${maxLines * lineHeight}px`;
        } else {
            readMore.style.top = "100%";
        }
    };

    window.addEventListener("resize", setLinkPosition);
    setLinkPosition();
});