javascript - 单击某个元素后选择具有特定类的下一个元素

标签 javascript jquery

HTML 看起来像(可扩展文本类内的跨度是通过 JS 生成的)

<span class="expandable-text">
    <span class="more">read more</span>
    <span class="details">blablabla</span>
</span>

当前 jQuery:

$('.expandable-text').on('click', '.more', function() {     
    setTimeout(function () {
        // bad as it selects all elements with that class...
        // $('.details').css('display', 'inline');
        $(this).next('span').css('display', 'inline');
    }, 50);
});

还尝试了$(this).parent().find('.details').css('display', 'inline');

我应该如何使用 details 类选择我刚刚单击的元素旁边的元素?

编辑:expandable-text 内的两个 span 元素都是动态生成的。 fiddle :http://jsfiddle.net/NTP9y/2/

最佳答案

您的 .next('span') 是正确的 - 如果您知道每个 .more 后面必然跟着一个 span.details那么您可以省略参数并只执行.next(),但如果不这样做也没有什么区别。

代码中的问题是 this 在超时回调中的范围不正确。

解决方案是调用 $(this) 并将其分配给 setTimeout() 之外的变量,然后将该变量传递给超时函数:

$('.expandable-text').on('click', '.more', function() {
    var details = $(this).next('span');
    setTimeout(function () {
        details.css('display', 'inline');
    }, 50);
});

关于javascript - 单击某个元素后选择具有特定类的下一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23464085/

相关文章:

在 .each 中设置 JavaScript/jQuery clearInterval

javascript - ext js 这个参数

Jquery 自动完成不显示下拉菜单

javascript - Gzip 和 Yslow - 有 2 个纯文本组件应该压缩发送

javascript - JS Array.splice 返回原始数组并链接到它

javascript - 来自 jquery 插件的 angularjs 指令

javascript - 在两个列表之间移动项目但过滤已存在的项目

php - 使用 AJAX 的文本内容和文件上传

javascript - 在javascript中读取本地csv文件?

javascript - 如何在React的render()中导航到react-router-1.0.3中的组件之外?