设置特色图片而不将其发布在主题中

我认为通常名称会添加到 alt 属性中。当我上传文件时,名称通常会添加到 markdown 中的大小前面,而这部分会被“alt”使用。

由于我不是 CSS 专家,我向 ChatGPT 询问了您的选项,并得到了这个答案。我想隐藏以 hide-this-image- 开头的图片,但后面还有其他内容。我得到的答案是:

不,纯 CSS 不支持 alt 属性的通配符或“开头是”选择器

CSS 属性选择器仅支持:

  • 精确匹配:[alt="value"]
  • 包含单词:[alt~="value"]
  • 包含子字符串:[alt*="value"]
  • 开头是:[alt^="value"]
  • 结尾是:[alt$="value"]

但是,alt^="hide-this-image-" 在您的示例中将无法可靠工作,因为CSS 无法在所有浏览器中匹配渲染图像时的 <img>alt 属性,尤其是在 Discourse 等系统中,因为 alt 属性不一定以 CSS 可以访问的方式反映在 DOM 中。

使用 CSS 的解决方法(仅在某些环境中有效):

.cooked img[alt^="hide-this-image-"] {
  display: none;
}

但同样,这在 Discourse 中可能无法一致工作,因为图像的渲染方式(例如通过 markdown 或 JS)。在这种情况下,您需要 JavaScript

JavaScript 可靠的替代方案:

document.querySelectorAll('.cooked img[alt^="hide-this-image-"]').forEach(img => {
  img.style.display = 'none';
});

这将在包括 Discourse 在内的所有环境中可靠地工作。

ChatGPT 的解决方案似乎奏效了:

Facebook Debugger 也将其识别为特色图片:

带有 Javascript 的组件:

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer((api) => {
  api.onPageChange(() => {
    document
      .querySelectorAll('.cooked img[alt^="featured-image-"]')
      .forEach((img) => {
        const parent = img.closest("div");
        if (parent) {
          parent.style.display = "none";
        } else {
          img.style.display = "none";
        }
      });
  });
});

我注意到它在图片本应在的位置保留了一些空间,所以我再次询问 ChatGPT,它补充说需要隐藏父容器,在这种情况下是 <div> 标签。

现在运行得很棒!

谢谢。已添加到我的笔记中。

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.