开发者问题收集

向类的每个元素添加随机字体

2017-09-04
247

一直试图让每个带有 .book 类的 div 从数组中分配一个随机字体。这是我目前的代码

var fonts = ['Gloria Hallelujah', 'Sedgwick Ave', 'Gochi Hand', 'Patrick Hand', 'Kalam', 'Rock Salt', 'Neucha', 'Caveat Brush', 'Schoolbell'];
var randomfont = fonts[Math.floor(Math.random() * fonts.length)];
$(".book").style.fontFamily = randomfont; 

我得到的错误是: Uncaught TypeError:无法设置未定义的属性“fontFamily”

有人知道我做错了什么吗?

3个回答

$(".book") 返回一个 jquery 数组。例如,要设置第一个数组,您需要使用:

$(".book")[0].style.fontFamily = 

您需要循环遍历 $(".book") 以获取 DOM 元素:

$(".book").each(function() {
    var randomfont = fonts[Math.floor(Math.random() * fonts.length)];
    this.style.fontFamily = randomfont; 
});

(除非您想将它们全部设置为相同的字体,在这种情况下,请在循环外设置 randomfont )。

fdomn-m
2017-09-04

这是因为您尝试直接在 jQuery 对象而不是 DOM 元素上设置 fontFamily。

使用 jQuery 的 css 方法或使用 get / 数组选择器 来检索 DOM 元素。

另一方面,您希望在每个元素上执行此操作,因此您需要像这样使用 each

//const fonts = ['Gloria Hallelujah', 'Sedgwick Ave', 'Gochi Hand', 'Patrick Hand', 'Kalam', 'Rock Salt', 'Neucha', 'Caveat Brush', 'Schoolbell'];
const fonts = ['Helvetica', 'Arial', 'Verdana', 'Courier', 'Courier New'];

$('.book').each(function(item) {
  const randomfont = fonts[Math.floor(Math.random() * fonts.length)];
  this.style.fontFamily = randomfont;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="book">Test 1</div>
<div class="book">Test 2</div>
<div class="book">Test 3</div>
<div class="book">Test 4</div>
<div class="book">Test 5</div>
<div class="book">Test 6</div>
lumio
2017-09-04

希望这会有所帮助。只需使用 document.getElementById('') 调用 id,然后设置字体值。

var fonts = ['Impact,Charcoal,sans-serif', 'Sedgwick Ave', ' Helvetica', 'Patrick Hand', 'Kalam', 'Rock Salt', 'Neucha', 'Caveat Brush', 'Schoolbell'];
var randomfont = fonts[Math.floor(Math.random() * fonts.length)];
alert(randomfont);
var val=document.getElementById("book").style.fontFamily = randomfont;
Supun
2017-09-04