【问题标题】:How can I hide a string and replace it with a view/hide button using jQuery?如何隐藏字符串并使用 jQuery 将其替换为查看/隐藏按钮?
【发布时间】:2011-03-16 20:47:27
【问题描述】:

我有一个动态填充的字段。我知道字符串的前几个单词总是:

订单是手动编辑的:

后面是所做的所有编辑的列表。这个列表有时可能有点长。

我想隐藏编辑列表,并将其替换为“点击查看编辑”按钮。当用户单击按钮时,它会使编辑列表出现在按钮上方,并将按钮文本更改为“隐藏编辑”。

我的想法是使用 jquery 函数找到“订单是手动编辑的:”,然后选择字符串的其余部分并将其保存到变量中,然后我需要让它隐藏完整的字符串并显示上面的字符串和按钮。当用户单击按钮时,它将简单地切换保存到变量中的字符串(编辑列表)。

我正在搜索的字符串是

.note_message

我有点迷失如何实现这一目标。我找到了 :contains 选择器,但我不确定如何只选择编辑列表而不是我正在搜索的字符串。我怎样才能去做我想做的事?

【问题讨论】:

  • 带有相关 HTML 的小样本会有很大帮助。

标签: jquery string toggle contains


【解决方案1】:

如果您可以控制页面的输出,那么最好的方法就是创建一个您想要隐藏的 div 或 span 或类似内容。

<span id="editsToHide">These are my edits</span>

然后你可以通过$('#EditsToHide')轻松找到它

http://jsfiddle.net/8q8ds/ 是您想要的代码示例(可能可以做得更时尚、更整洁,但它是一个概念证明,应该让您朝着正确的方向思考。

注意,我还添加了一些东西,通过让 CSS 隐藏按钮而不是编辑,然后 javascript 隐藏编辑并显示按钮,使其在非 JS 浏览器上工作。没有 JS 意味着它将始终显示数据,而不是将其隐藏而无法获取。 :)

编辑:

要在不控制标记的情况下执行此操作,您需要添加自己的标记。我在这里根据旧的小提琴做了一个新的小提琴:http://jsfiddle.net/8q8ds/2/。关键的新代码是:

var messageText = $('.note_message').html()
var staticText = 'The order was manually edited:<br/>';
var dynamicText = messageText.substring(staticText.length-1);
var newHTML = staticText + '<span id="editsToHide">'+dynamicText+'</span>'
$('.note_message').html(newHTML);

您可以看到它找到了您的“note_message”范围的内容(请注意,如果这些意外行为中的一个以上可能发生)。然后它切断已知部分以获得未知部分(您可能需要进行一些验证以确保您切断的位实际上是您在输出 HTML 发生更改时所期望的)。然后它构造一些带有 span 的新 HTML,使其具有上述格式,然后像以前一样继续。

希望这会有所帮助。

编辑 2:刚刚更新了第二个 jsfiddle,因为我意识到我没有动态添加按钮。

【讨论】:

  • 您的代码看起来确实不错,但我无法控制正在使用的字符串。这就是为什么我想选择字符串“订单被手动编辑:”之后的所有文本并将其保存到变量中。我怎样才能先做到这一点?
  • @zeckdude:在这种情况下,我们需要了解更多您的页面结构。您提供给我们的信息可能使我们能够找到从哪里开始查找要显示/隐藏的字符串,但我们目前没有关于如何找到该字符串结尾的信息。向我们展示这部分页面的 HTML,我们可能会帮助您找到找到所需内容的方法。
  • 订单是手动编辑的:
    编辑列表在这里,有时可能有点长
    这是html的一个例子字符串所在的结构。它始终是同一个类,并且始终以该字符串开头。
  • @zeckdude:我已经编辑了我的答案,包括如何应对需要更改初始标记。我希望这对您有所帮助,但请确保您对 HTML 格式的更改进行防御性编码,这样您就不会在页面发生更改时直接破坏页面。
【解决方案2】:

为什么不将您的编辑内容封装在某个容器中?然后只需使用 javascript 将其隐藏,这样没有它的人也可以享受您的编辑列表。

一些示例代码:

<html>
    <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
        <script type="text/javascript">
            $(function() {
                $('#edits').css('display', 'none');
                $('#show.button').css('display', 'inline');
                $('.button').click(
                    function() {
                        $('#edits, .button').toggle();
                    }
                );
            });
        </script>
        <style type="text/css">
            .button {
                display: none;
            }
        </style>
    </head>
    <body>
        The order was manually edited:
        <input type="submit" value="Click to View Edits" id="show" class="button" />
        <input type="submit" value="Hide Edits" id="hide" class="button" />
        <p id="edits">
            Some edits.
        </p>
    </body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2020-11-04
    • 2012-09-29
    • 2021-10-19
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多