jquery - 展开div+焦点,折叠之前的div,并在新页面上自动展开

标签 jquery

我想做一些事情:

  1. 焦点 <textarea>扩展 <div> 时框。
  2. 折叠之前打开的内容 <div>扩展新框时的框
  3. 单击“编辑”链接时,文本将进入 <textarea>待编辑。所以我要么需要一种方法来使用 jQuery 将字符串放入 <textarea>或自动展开<div>显示<textarea>使用其中的字符串进行编辑。

由于我之前的问题,我可以展开/折叠工作:Expanding / Collapsing divs

内容由 PHP/MySQL 生成。

这是我的 fiddle :http://jsfiddle.net/Draven/kUhkP/85/

抱歉,如果我遗漏了任何重要信息,如果我想到应该添加一些内容,我会编辑这篇文章。

有关 #3 的更多信息

当点击“编辑”链接时,页面会“刷新”(这是同一页面,但 URL 发生了变化),他们想要编辑的内容现在显示在 <textarea> 中。盒子。当页面更改时,它会显示包含所有 <div> 的页面。盒子折叠了。

我需要<div>具有 <textarea> 中的可编辑内容自动扩展。

有没有办法检查 <textarea> 是否存在有内容则有 <div>扩展?

最佳答案

尝试this :

$(document).on('click', '.postreply', function(e) {
    $(this).closest('.blogcontainer').siblings('.blogcontainer').find('.postreplycontainer').slideUp("fast");
    $(this).closest('.blogcontainer').find('.postreplycontainer').slideToggle("fast")
        .find('textarea[name=replycontents]').focus();
});

这里我使用 $(document).on 来将事件委托(delegate)所有元素,包括当前和 future (动态) 。请记住,如果您曾经使用过 jQuery *pre*1.7,那么您只需将 .on 更改为 .delegate 即可。由于它是委托(delegate),.delegate 一度看起来很合适,但是,时代已经变了。现在,如果您愿意,您仍然可以使用“.delegat”。 jQuery 已指出,他们没有“弃用”也不打算删除 .delegate。他们只是觉得 1.7 中 .on 的实现取代了 .delegate,因此他们建议使用 .on 进行委托(delegate)。

抛开所有这些华丽的东西,使用 .on 的委托(delegate)形式非常简单,正如您所看到的。规则很简单。 $(selector) 应该是“present onload”的“父”元素,或者您可以简单地使用 $(document)

您的 .on 参数也同样简单。第一个参数是您要分配的事件的字符串名称。请记住,您可以仅用一个空格来分配多个事件; exp 'change keydown' (这是文本区域的流行事件分配)。

第二个参数与任何其他 jQuery 选择器类似。请记住,将分配满足要求的所有元素。因此像 'div' 这样的东西会为所有 div 元素分配一个事件。

最后一个是“回调”方法。当然,e 代表传入的事件对象。例如,e.target 在函数中与 相同$(这个)

<小时/>

至于#3

如果您每次都重新加载页面,则只需找到第一个包含内容的文本区域并下拉其父容器即可。这仅意味着添加一行简单的代码:

$('.blogcontainer textarea[name=replycontents]').filter(function(i) { return $.trim($(this).val()) != ""; }).closest('.postreplycontainer').slideDown("fast");

将其分解一些:

  • $('.blogcontainer textarea[name=replycontents]'):我想您现在已经了解选择器了,但请注意,请记住,您可以使用“any"CSS 选择器作为 jQuery 选择器。
  • .filter(function(i) { return $.trim($(this).val()) != ""; }):这个方便的小 jQuery 方法允许我们“过滤” “我们基于给定回调的“选择”结果。
    • (i) 代表索引,从 0 开始。
    • 我在这里使用的返回方法“修剪”文本区域的,从而删除尾随和前导空格。 - 因此,要编辑的文本区域除了空白之外什么都没有,将返回 false。 -您可能需要编辑此申报表以满足您的需求。
    • 了解更多:http://api.jquery.com/filter/
  • .closest('.postreplycontainer'):只需获取与选择器匹配的最接近的父元素。
    • 为什么我们现在需要 parent ?好吧,我们找到了包含内容的文本区域,现在我们需要展开父级。
    • 请记住,虽然多个文本区域可能有内容,但一旦我们将其添加到链中,我们就只能获得第一个具有内容的父级
  • .slideDown("fast");:最后,。滑下装有内容的盒子来关闭链条!

参见Fiddle Here !请记住,我不会“重新加载”页面或任何内容。但是,通过在那里放置线条,第一个包含内容的框将始终滑落。如果不需要,您可能需要考虑使用 jQuery's Ajax为了编辑一个框。

关于jquery - 展开div+焦点,折叠之前的div,并在新页面上自动展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17320350/

相关文章:

javascript - 如何找到类为 "select"的 attr

javascript - 移动设备和浏览器屏幕方向不同的 javascript/jQuery 函数

javascript - jQuery 单击事件在 IE7 和 IE8 上不起作用

jquery - 在手机上单击/触摸通过api启动Youtube视频

javascript - js变量在ajax中不更新

javascript - 在 Angular 7 的下拉列表中选择第一个元素

javascript - 让每个挂载都在 dropzone js 上传目录中创建一个新文件夹

javascript - 将父链接和子链接作为一个捕获到以冒号分隔的 Label 参数中

javascript - 上传和删除图像

javascript - jQuery 验证插件,IE7 "SCRIPT3: Member not found"