这应该适用于任何浏览器
window.addEventListener("load", function() {
  var elements = document.getElementsByClassName("rainbowText");
  for (let i = 0; i < elements.length; i++) {
    generateRainbowText(elements[i]);
  }
});
function generateRainbowText(element) {
  var text = element.innerText;
  element.innerHTML = "";
  for (let i = 0; i < text.length; i++) {
    let charElem = document.createElement("span");
    charElem.style.color = "hsl(" + (360 * i / text.length) + ",80%,50%)";
    charElem.innerHTML = text[i];
    element.appendChild(charElem);
  }
}Run Code Online (Sandbox Code Playgroud)
p {
  font-size: 2em;
  font-weight: 500;
}Run Code Online (Sandbox Code Playgroud)
<p class="rainbowText">This is an awesome text</p>Run Code Online (Sandbox Code Playgroud)
这是一个仅限 webkit 的答案(Chrome),但应该更有效。
更新 (01/2021):现代浏览器支持此功能。
有关兼容性列表,请在此处 (MDN)检查background-clip: text(包括仅支持 -webkit- 前缀的那些)
let nb_stops = 10; // 10 color stops should be enough
let dir = "left"; // left, right, top, bottom
function SetupRainbow() {
  var rainbowStr = GetRainbowString(nb_stops, 80, 50);
  var oppositeDir = (dir==="left"?"right":(dir==="right"?"left":(dir==="top"?"bottom":"top")));
  var css = '.rainbowText {\
   background-clip: text;\
   color: transparent;\
   -webkit-background-clip: text;\
   -webkit-text-fill-color: transparent;\
   background-image: -webkit-linear-gradient(' + dir + ',' + rainbowStr + '); \
   background-image: linear-gradient(to ' + oppositeDir + ',' + rainbowStr + ') \
}'
  var style = document.createElement("style");
  style.type = 'text/css';
  if (style.styleSheet) {
    style.styleSheet.cssText = css;
  } else {
    style.appendChild(document.createTextNode(css));
  }
  document.head.appendChild(style);
}
// function that generate the rainbow string
function GetRainbowString(nbStops, saturation, luminosity) {
  let gap = 360 / nbStops,
    colors = [];
  for (let i = 0; i < nbStops; i++) {
    colors.push("hsl(" + (i * gap) + "," + saturation + "%," + luminosity + "%)");
  }
  return colors.join();
}
window.addEventListener("load", function() {
  SetupRainbow();
});Run Code Online (Sandbox Code Playgroud)
span {
  font-size: 2em;
  font-weight: 500;
}Run Code Online (Sandbox Code Playgroud)
<span class="rainbowText">This is an awesome text</span>Run Code Online (Sandbox Code Playgroud)