Javascript var.className不太明白

时间:2016-12-07 19:07:38

标签: javascript html css

我正在阅读JavaScript_and_JQuery_Interactive_Front-End_Web_Development_by_Jon_Duckett,这是Javascript学习的一部分。 我在第119页,添加和删除对象的属性。 Bellow是html,js和css文件。

我更改了javascript文件

elPool.className = "Pool: " + hotel.pool;

是:

elPool.className = hotel.pool

但它似乎没有改变Firefox中的输出。

问题:

  1. 我不得不考虑理解.className的事情,我的结论是:var elPool首先得到'pool'元素的HTML值(在这种情况下,它是'pool'这个词)。然后,该元素通过elPool变量分配了一个新类(因为之前没有它)。在这种情况下,它是一个类.true。 正确或错误的结论?
  2. 在CSS文件中,.true.false类只有一个联合图片。当必须有一个十字标志和一个交叉检查标志时,这怎么可能?这是两张照片?
  3. var elGym获得className false(通过elGym.className = hotel.gym;),并相应地获得CSS调整。如果var elPool有两个添加为classNames(classNametrue的内容,那么"Pool: "如何获得hotel.pool "Pool: "<!DOCTYPE html> <html> <head> <title>JavaScript &amp; jQuery - Chapter 3: Functions, Methods &amp; Objects - Adding properties</title> <link rel="stylesheet" href="css/c03.css" /> </head> <body> <h1>TravelWorthy</h1> <div id="info"> <h2>hotel facilities</h2> <div id="hotelName"></div> <div> <p id="pool">Pool</p> <p id="gym">Gym</p> </div> </div> <script src="js/adding-and-removing-properties.js"></script> </body> </html> 部分完全被忽略了,或者这里的原理是什么? Thanx all!
  4. HTML:

    // Set up the object
    var hotel = {
      name : 'Park',
      rooms : 120,
      booked : 77
    };
    
    hotel.gym = false;
    hotel.pool = true;
    delete hotel.booked;
    
    // Update the HTML
    var elName = document.getElementById('hotelName'); // Get element
    elName.textContent = hotel.name;                   // Update HTML with property of the object
    
    var elPool = document.getElementById('pool');      // Get element
    elPool.className = "Pool: " + hotel.pool;                     // Update HTML with property of the object
    
    var elGym = document.getElementById('gym');        // Get element
    elGym.className = hotel.gym;                       // Update HTML with property of the object
    

    JS:

    @import url(http://fonts.googleapis.com/css?family=Open+Sans);
    
    body {
      background-color: #fff;
      background: url("../images/travelworthy-backdrop.jpg") no-repeat center center fixed;
      -webkit-background-size: cover;
      -moz-background-size: cover;
      -o-background-size: cover;
      background-size: cover;
      margin: 0;
      font-family: 'Open Sans', sans-serif;}
    
    h1 {
      background: #1e1b1e url("../images/travelworthy-logo.gif") no-repeat;
      width: 230px;
      height: 180px;
      float: left;
      text-indent: 100%;
      white-space: nowrap;
      overflow: hidden;
      margin: 0;}
    
    h2 {
      margin: 1.75em 0 0 0;
      color: #adffda; 
      font-weight: normal;}
    
    h2 + p {
      margin: 0.25em 0 0 0;}
    p + p {
      margin: 0;}
    p + h2 {
      margin: 10px 0 0 0;}
    
    /* message under the logo */
    
    #message {
      float: left;
      clear: left;
      background-color: #ffb87a;
      color: #1e1b1e;
      width:170px;
      padding: 18px 30px;
      text-align: center;}
    
    /* black bar across the right hand side of the page */
    
    #info {
      background-color: #1e1b1e;
      color: #fff;
      width: 200px;
      padding: 0 15px;
      text-align: center;
      min-height: 100%;
      position: absolute;
      top: 0;
      right: 15%;}
    
    /* details in the black bar */
    
    #hotelName {
      text-transform: uppercase;
      text-align: center; 
      font-size: 120%;
      margin-top: 10px;
      border-top: 1px solid #fff;
      border-bottom: 1px solid #fff; 
      padding: 10px 0;}
    
    #hotel1 {
      margin-top: 1em; 
      border-top: 1px solid #fff; 
      padding-top: 1em;} 
    #hotel2 {
      border-bottom: 1px solid #fff; 
      padding-bottom: 1em;}
    
    #rooms {
      font-size: 440%;
      color: #ffb87a;
      display: inline-block;
      margin: 0;}
    
    #roomRate{
      text-decoration: line-through;
      display: inline-block;
      float: left;
      padding-top: 10px;}
    
    #specialRate {  
      font-size: 440%;
      color: #ffb87a;
      display: inline-block;
      padding: 10px 0 20px 0;
      margin: 0;}
    
    #offerEnds {
      text-transform: uppercase;
      color: #ffb87a;
      font-size: 75%;}
    
    .true, .false {
      padding: 0 50px 0 50px;
      line-height: 28px;
      text-align: left;
      background-image: url("../images/check-cross.png");
      background-position: 120px 0;
      background-repeat: no-repeat;}
    
    .false {
      background-position: 120px -28px;}
    
    /* footer */
    
    #footer {
      position: absolute;
      bottom: 0;
      left: 0;
      width: 100%;
      background-color: #adffda;}
    
    #footer p {
      padding: 10px;
      margin: 0;}
    
    .data {
      padding: 10px;}
    

    CSS:

    {{1}}

1 个答案:

答案 0 :(得分:2)

  1. document.getElementById('pool')返回DOM元素,而不是文本内容。因此,当您分配到.className属性时,您需要设置元素的类,就好像它在HTML中有class="Pool: true"一样。

  2. .true.false的CSS中有一个联合条目,但.false的另一个条目覆盖了{{1}风格。它使用CSS sprite:单个图像文件,其中包含不同位置的多张图片,background-position根据班级安排合适的图片显示。

  3. background-position是以空格分隔的类列表,因此className是两个类"Pool: true"Pool:。由于true没有CSS(因为.Pool:在CSS选择器中具有特殊含义而必须写为.Pool\:),所以该类实际上被忽略了。我不确定书中的原因,也许是尝试在HTML中使类的含义更加明显。恕我直言,最好使用:pool-truepool-falsepool等类。