javascript - 如何使用 JavaScript 定位 <article> 中的特定元素?

标签 javascript twitter-bootstrap laravel-5.3

我需要使用js访问文本区域并在 Bootstrap 模式中填充输入字段。 我可以通过编写以下行来访问标题:

event.target.parentNode.parentNode.childNodes[1].textContent;

但是当涉及到帖子正文时,我无法在这一行访问它:

event.target.parentNode.parentNode.childNodes[2].textContent;

这是我正在使用的 html:

<article class="post col-md-6 ">
        <div class="media postforeach postborderleft">
            <div class="media-left media-top">

            </div>
            <div class="media-body">
                <header><h5 class="media-heading">{{ $post->title }}<i class="fa fa-angle-down pull-right " aria-hidden="true"></i></h5> </header>
                <p><i>{{ $post->body }}</i></p>
                <div class="info">
                    Posted by {{ $post->user->name }} on {{ $post->created_at }}
                </div>
              @if (Auth::check())
                <div class="interaction">
                      <a href="#" class="like">Like</a> |
                      <a href="#" class="like">Dislike</a>
                @if (Auth::user() == $post->user)
                        |
                      <a href="#" class="edit">Edit</a> |
                      <a href="{{ route('post.delete', ['post_id' => $post->id]) }}" class="like">Delete</a>
                 @endif
                </div>
              @else
                <a href="{{ route('registeration') }}" class="like" style="color: red">Login to interract with posts!</a>
              @endif
            </div>
        </div>
        <br>
    </article>

这是整个js代码:

$('.post').find('.edit').on('click',function(event) {
event.preventDefault();

var postTitle = event.target.parentNode.parentNode.childNodes[1].textContent;
var postBody = event.target.parentNode.parentNode.childNodes[2].textContent;
$('#post-title').val(postTitle);
$('#post-body').val(postBody);

$('#edit-model').modal();
});

非常感谢任何帮助。

最佳答案

这是由于 .media-body 的子节点之间有空格造成的,变成Text解析时 DOM 中的节点。

您应该使用其中之一

var postBody = event.target.parentNode.parentNode.children[1].textContent;

var postBody = event.target.parentNode.parentNode.childNodes[3].textContent;

或者更好的是,重写您的标记以获得正确的可选 {{ $post->body }}容器(例如,向 <p> 添加一个类),并使用来自共同祖先(可能是 .media-body )的选择,而不是硬编码的节点遍历。

编辑: 另外,既然您已经在使用 jQuery,为什么不使用 jQuery 正确的 DOM 遍历语法:

var $mediaBody = $(this).parents('.media-body'),
    postTitle = $mediaBody.find('.media-heading').text(),
    postBody = $mediaBody.find('p:first').text();

关于javascript - 如何使用 JavaScript 定位 <article> 中的特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41748255/

相关文章:

javascript - 当它们属于同一个模块时,如何将 nestjs 服务注入(inject)另一个服务?

javascript - Microsoft JScript 运行时错误

php - laravel Eloquent 查询中的位置不适用于两个数组

html - Bootstrap 模式页脚 css

jquery - Bootstrap.js (3.1) 崩溃 ('hide' ) 如果在崩溃 ('show' ) 之后调用太快,则不会隐藏元素

postgresql - 运行 laravel 迁移时出现密码验证失败错误

php - 基于多对多关系与同一列上的多个条件进行搜索

javascript - 在 Angular JS 中将图像 blob 应用于 src?

Javascript 在 Canvas 上绘制并将其与视频合并并一起保存

HTML CSS : Change the Bootstrap Tooltip Shape