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

时间:2017-09-04 08:09:14

标签: javascript jquery css arrays

一直试图让每个具有类.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: Cannot set property 'fontFamily' of undefined

任何人都知道我做错了什么?

3 个答案:

答案 0 :(得分:2)

$(".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)。

答案 1 :(得分:0)

那是因为你试图直接在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>

答案 2 :(得分:0)

希望这会有所帮助。只需使用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; 调用id,然后设置字体值。

eglSwapBuffers