最后更新!
我有一组评论的容器面板。每个评论都有不同的长度,所以容器的高度应该是动态的,这可以通过height:auto
. 为了能够输入新的评论,用户应该单击一个按钮,输入文本将呈现在评论面板下。所以我编写了一个 js 函数,它获取面板的高度并将其设置为输入文本的位置顶部值,即:
var commentPanelStr = 'dataTableFormHM' + ':dataTableHM:' + rowIndex + ':commentPanel';
var commentPanel = $(document.getElementById(commentPanelStr));
commentPanel.css({
"height":"auto",
"top":commentPanelTopValue
});
var commentInputPanelStr = 'dataTableFormHM' + ':dataTableHM:' + rowIndex + ':commentInputPanel';
var commentInputPanel = $(document.getElementById(commentInputPanelStr));
var y = parseInt(commentPanel.height())+commentPanelTopValue;
commentInputPanel.css("top", y);
关于这个功能的问题是;commentPanel.height()
返回大约一半的实际高度值。下图显示了它的外观:
但它看起来像:
我试图将函数标题更改$(window).load()
为 $(document).ready()
. 函数也outerHeight() $(elem).css('height');$(elem)[0].height; $(elem)[0].innerHeight; $(elem)[0].clientHeight;
返回错误的值。
jQuery position() 函数还将 inputText 插入到评论面板的中间,这是评论面板的大约一半,代码如下:
commentInputPanel.position({my:"bottom",at:"bottom",of:commentPanel});
我认为 jQuery 函数无法获得确切的值,height:auto
但问题是为什么?
相关xhtml代码:
<p:panel id="commentPanel" style="width:353px; height:34px;position:absolute;left:370px;top:149px;"
styleClass="statusComment">
<ui:param name="max" value="#{Status.numOfCommentsShown}"/>
<ui:repeat var="Comment" value="#{Status.commentListOfStatus}" varStatus="statusVar">
<ui:fragment rendered="#{statusVar.index lt max}">
<li>
<div class="wrapper" id="wrapperDiv" style="word-wrap: break-word;width: 335px;">
<h:link value="#{Comment.commentAuthorName}: " id="goToProfileWithAuthorName"
outcome="/profile.xhtml" type="submit"
style="text-decoration:none;font-family:arial;font-weight:bold;font-size: 11px;color: rgb(120,120,159);">
<f:param name="userId" value="#{Comment.comauthorId}"/>
</h:link>
<h:outputText id="commentText" value="#{Comment.commentText}"
style="font-family:arial;font-size: 11px;color: rgb(77,77,103);"></h:outputText>
<br/>
<abbr class="timeago" title="#{Comment.commentDate}"
style="color: #778899;font-size: 10px;">
</abbr>
<p:commandLink styleClass="deleteCommentButton" style="display:none;">
<p:graphicImage value="/images/smallCancel.png" alt="delete"
style="outline: none; border:none"/>
</p:commandLink>
</div>
</li>
</ui:fragment>
</ui:repeat>
</p:panel>
感谢您的帮助。
更新!
我想我找到了原因!正如在 xhtml 中看到的那样,我有 br 标记和带有图像的命令链接。当我删除该 br 标记图像并且 timeago 写在同一行中的注释之后,在这种情况下 height() 计算正确。
但是每当我使用 a <br/>
or<p/>
表示有新行时,height()
函数就会损坏。但我不知道如何解决?