文章目录

  • 需求:
  • 一、给div赋值
  • 二、js代码接收值,并将值赋到其他html元素中去
  • 三、使用th:attr动态赋值


需求:

有时候我们有这么一个需求:写了一个div标签,然后想在这个div里面赋一些值,然后将这个div里的值传到下一个div(也可以是其他html元素)里去。

解决方案:使用HTML的【data-】字段,一段js代码

一、给div赋值

<div class="actions">
    <a data-commentid="1" data-commentnickname="大吉" onclick="reply(this)">回复</a>
</div>

简单解释一下:

HTML5自定义属性之 【data-】
HTML5 增加了一项新功能是 自定义数据属性 ,也就是 data-* 自定义属性。
在HTML5中我们可以使用以 data- 为前缀来设置我们需要的自定义属性,来进行一些数据的存放。

应用在这里,就是设置了两个属性,一个是commentid=“1” ; 另一个是commentnickname=“大吉”

这样我们就有了两个属性,commentid和commentnickname。然后根据后面的οnclick=“reply(this)” 将这两个属性给传到后面的js代码里去

至于为啥不用驼峰命名法,(据说)传大写字母会导致js接收不到

二、js代码接收值,并将值赋到其他html元素中去

/*
            点击回复按钮,会调用下面这个reply函数
            该js负责接收前面(this)传过来的 commentid, commentnickname两个属性
         */
        function reply(obj) {
            var commentId = $(obj).data('commentid');
            var commentNickname = $(obj).data('commentnickname');
            
            $("[name='parentComment.id']").val(commentId);  //将隐藏域的commentId赋值
            $("[name='content']").attr("placeholder", "@"+commentNickname).focus();     //给评论内容区域显示 @昵称(做到回复某人消息的 @昵称 功能)
        }

前面的html调用了该函数(onclick="reply(this)")。点击按钮就会执行。

执行上面的js代码,会将之前赋的值传给另一个div中(代码如下):

<div id="comment-form" class="ui form">
    <input name="parentComment.id">
    <div class="field">
        <textarea name="content" placeholder="请输入评论信息..."></textarea>
    </div>
</div>

这样,这个div里面的input的value字段,就是前面传来的commentId,textarea里面的plaseholder字段,就是前面传来的 commentNickname。

三、使用th:attr动态赋值

至于想和后台交互,从后台拿值咋办?只需要使用thymeleaf的一个标签:th:attr

代码如下:

<div class="actions">
    <a data-commentid="1" data-commentnickname="大吉" th:attr="data-commentid=${comment.id},data-commentnickname=${comment.nickname}" onclick="reply(this)">回复</a>
</div>

后面的th:attr就是配合前面的data- 来给属性动态赋值的 (完成动态赋值,连接后台Controller)

后面的js代码不用变。