我正在创建一个网页,其中包含从数据库中提取的公告。这是我的HTML代码
<table width="100%" border="0">
<?php while($row = mysql_fetch_array($result)){ ?>
<tr>
<td id="maintitle" style="font-size: 34px; font-weight: bold;"><?php print $row['title']; ?></td>
</tr>
<tr>
<td id="maincontent"><?php print $row['content'];?></td>
</tr>
<tr>
<td id="mainname" style="font-size: 12px; font-style: italic;"><?php print $row['name'];?></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<?php }?>
</table>
我想要的是,如果没有公告,TD元素将显示特定文本,并且我已决定使用jQuery。这是我的代码
<script type="text/javascript">
$(document).ready(function(){
$('#maintitle',this).each(function(){
if($(this).html() != '');
$(this).append("No Incidents recorded!");
});
});
</script>
但是,即使数据库中没有公告,也没有任何反应。我想知道是否有不同的方法,或更改jquery代码。
答案 0 :(得分:1)
我认为这是你想要的代码 - 你必须循环遍历tr而不是
$(document).ready(function(){
$('table tr').each(function(){
if($(this).find('td').html() == ''){
$(this).find('td').html("No Incidents recorded!");
}
});
});
答案 1 :(得分:0)
首先,你的jQuery脚本与你想要的完全相反(如果我理解你的问题) - 如果元素中有值,它会附加文本。主要的逻辑问题在if语句中:
if($(this).html != '');
$(this).append("No Incidents recorded!");
...那说“如果元素中的内部html不为空 - 附加字符串......”
应该是:
if($(this).html() === '') {
$(this).append("No Incidents recorded!");
}
我应该指出代码的其他问题,即使它与问题无关:
正如Mark B在评论中指出的那样,您在循环的每次迭代中输出相同的id
值(W3 specification)。解决方案 - 使用class
属性。
您正在立即终止if
语句,因此它对以下代码没有影响:
if($(this).html != '');
应该是:
if($(this).html() === '') {
// execute this code when the if statement resolves to true.
}
脚本中的这一行是错误的,因为您需要调用$
函数,而您正在做的是引用jQuery中不存在的$document
变量 :
$document.ready(function(){
应该是:
$(document).ready(function () {
你真的不需要在jQuery函数中使用第二个参数(this
),因为将this
作为上下文传递是没有意义的:
$('#title',this).each(function(){
您应该在html之后添加括号,因为它是一个函数 - 而不是属性:
if($(this).html != '');
应该是:
if($(this).html() ...
还需要考虑更多要点(不是很多错误,只是一些提示):
使用循环或其他php结构与html结合使用替代语法(只是使代码更清晰):
<?php while(expression):?>
<a href="#">example link</a>
...
<?php endwhile ?>
使用简写版<?php echo ... ?>
或<?php print ... ?>
:
<?= 'some string...' ?>
快乐的编码!