2016-01-06 87 views
-2

我有一個名爲shop_attributesjQuery和改變HTML輸出

結構的表類如下:

<table class="shop_attributes"> 
    <tbody> 
    <tr class=""> 
     <th>Reserved</th> 
     <td> 
     <p>false</p> 
     </td> 
    </tr> 
    <tr class="alt"> 
     <th>Show Terms And Conditions</th> 
     <td> 
     <p>true</p> 
     </td> 
    </tr> 
    </td> 
    </tr> 
    </tbody> 
</table> 

使用jQuery我想要的虛假每個實例更改爲不和的每個實例是的。

我有下面的代碼,那裏還沒有。任何人都可以在這裏提出問題。

(function($) { 
    $(document).ready(function() { 
     if ($('#tab-additional_information > table > tbody > tr:nth-child(2) > td > p').val() == "true" { 
      $('#tab-additional_information > table > tbody > tr:nth-child(2) > td > p').replaceWith("Yes") 
     } 
    }); 
}(jQuery)); 
+2

'p'標籤不返回'VAL ()'。使用'text()'或'html()' –

+0

另外,你的HTML是無效的,你的JavaScript中有拼寫錯誤。 – j08691

+0

爲了與Quentin的答案一起提供一些建議,'val()'主要用於從表單元素(認爲輸入)獲取值。你可以閱讀它[這裏](http://api.jquery.com/val/)。 –

回答

1

從我的評論:p標籤不返回val()。使用text()html()

而且,由於沒有其他人覆蓋它的text()(和.html())功能允許您提供一個函數作爲參數,而不是一個值。該函數的返回值用於替換文本。

這意味着你可以將其降低到:

$('table.shop_attributes p').text(function() { 
    if ($(this).text() == 'false') return 'no'; 
    if ($(this).text() == 'true') return 'yes'; 
}); 

甚至更​​短(如果該值只有truefalse):

$('table.shop_attributes p').text(function() { 
    return $(this).text() == 'true' ? 'yes' : 'no'; 
}); 
3

段落沒有值。您需要.text()

您可能還希望設置文本.text("Yes")而不是用文本節點替換整個段落元素。

1

如上所述,val()用於輸入。在處理段落時,您希望使用text()html()來讀取值。您可以簡單地循環和設置文本,而不是選擇每個元素。 (假定有表中沒有其他段落)

$(".shop_attributes p").each(
 
    function() { 
 
    var p = $(this); 
 
    var txt = p.text(); 
 
    var updated = txt === "true" ? "yes" : "no"; 
 
    p.text(updated); 
 
    } 
 
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table class="shop_attributes"> 
 
    <tbody> 
 
    <tr class=""> 
 
     <th>Reserved</th> 
 
     <td> 
 
     <p>false</p> 
 
     </td> 
 
    </tr> 
 
    <tr class="alt"> 
 
     <th>Show Terms And Conditions</th> 
 
     <td> 
 
     <p>true</p> 
 
     </td> 
 
    </tr> 
 
    </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

1

正如評論所指出的那樣,你不能使用.val()更改段落元素的含量。另外,正如我在評論中指出的那樣,您的代碼中存在拼寫錯誤和錯誤。校正所有這一切,以下工作:

$('table.shop_attributes p').each(function() { 
 
    if ($(this).text() == 'false') $(this).text('no') 
 
    if ($(this).text() == 'true') $(this).text('yes') 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<table class="shop_attributes"> 
 
    <tbody> 
 
    <tr class=""> 
 
     <th>Reserved</th> 
 
     <td> 
 
     <p>false</p> 
 
     </td> 
 
    </tr> 
 
    <tr class="alt"> 
 
     <th>Show Terms And Conditions</th> 
 
     <td> 
 
     <p>true</p> 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
</table>