当点击相应的链接时,如何使用 jQuery 将标签更改为文本字段?

发布于 2024-10-07 04:22:44 字数 1269 浏览 0 评论 0原文

我有一个表格,我需要当单击特定范围时,它之前的范围从标签更改为文本字段。下表:

<table>
    <tbody>
        <tr>
            <td><span class="spanName">John Doe</span>&nbsp;<span class="spanDefaultName">Alter</span></td>
        </tr>
        <tr>
            <td><span class="spanName">Jayne Doe</span>&nbsp;<span class="spanDefaultName">Alter</span></td>
        </tr>
    </tbody>
</table>

现在假设单击 John Doe 后的“更改”,其之前的范围必须从“John Doe”更改为文本字段(这也适用于所有其他字段)。如果单击 John Doe 的 alter span,结果将如下所示:

<table>
    <tbody>
        <tr>
            <td><span class="spanName"><input type="text" /></span>&nbsp;<span class="spanDefaultName">Alter</span></td>
        </tr>
        <tr>
            <td><span class="spanName">Jayne Doe</span>&nbsp;<span class="spanDefaultName">Alter</span></td>
        </tr>
    </tbody>
</table>

如果可能,并且我认为可以通过使用 :next 或类似的东西来使用 jQuery,我必须仅使用类而不是 ID 来实现此目的。

另外,如果您认为我应该使用锚而不是跨度,请告诉我。我使用跨度只是因为 jQuery 中的 :next 和 :previous 功能。

任何帮助将不胜感激

I have a table and I need that when a particular span is clicked, the span before it changes from a label to a text field. The following is the table:

<table>
    <tbody>
        <tr>
            <td><span class="spanName">John Doe</span> <span class="spanDefaultName">Alter</span></td>
        </tr>
        <tr>
            <td><span class="spanName">Jayne Doe</span> <span class="spanDefaultName">Alter</span></td>
        </tr>
    </tbody>
</table>

Now lets say that the Alter after John Doe is clicked, the span before it has to change from just John Doe to a textfield (This applies also for all the others). This is how the result will look like if John Doe's alter span is clicked:

<table>
    <tbody>
        <tr>
            <td><span class="spanName"><input type="text" /></span> <span class="spanDefaultName">Alter</span></td>
        </tr>
        <tr>
            <td><span class="spanName">Jayne Doe</span> <span class="spanDefaultName">Alter</span></td>
        </tr>
    </tbody>
</table>

If possible, and I think it is possible with jQuery by using :next or something of this sort, I have to implement this with using just classes and not IDs.

Also, if you think that I should use an anchor instead of a span, please let me know. I am using a span simply because of the :next and :previous functionalities in jQuery.

Any help would be greatly appreciated

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

要走干脆点 2024-10-14 04:22:44

这将使您在单击时获得文本框,允许您调整文本,然后在模糊时将跨度设置回输入的新文本。 示例

JavaScript

$('.spanName').click(function() {
    var $elem = $(this);
    var text = $elem.text();
    var input = $('<input value="' + text + '" />')
    $elem.text('').append(input);
    input.select();

    input.blur(function() {
        var text = input.val();
        input.parent().text(text);
        input.remove();
    });
});

HTML

<table>
    <tbody>
        <tr>
            <td><span class="spanName">John Doe</span> <span class="spanDefaultName">Alter</span></td>
        </tr>
        <tr>
            <td><span class="spanName">Jayne Doe</span> <span class="spanDefaultName">Alter</span></td>
        </tr>
    </tbody>
</table>

This will get you the textbox on click, allow you to adjust text, then on blur set the span back with the new text entered. Example

JavaScript

$('.spanName').click(function() {
    var $elem = $(this);
    var text = $elem.text();
    var input = $('<input value="' + text + '" />')
    $elem.text('').append(input);
    input.select();

    input.blur(function() {
        var text = input.val();
        input.parent().text(text);
        input.remove();
    });
});

HTML

<table>
    <tbody>
        <tr>
            <td><span class="spanName">John Doe</span> <span class="spanDefaultName">Alter</span></td>
        </tr>
        <tr>
            <td><span class="spanName">Jayne Doe</span> <span class="spanDefaultName">Alter</span></td>
        </tr>
    </tbody>
</table>
薯片软お妹 2024-10-14 04:22:44

像这样的东西:

$(".spanDefaultName").click(function() {
    var text = $(this).prev("span").text();
    $(this).prev("span").hide();
    $(this).before('<input value="' + text + '" />');
    $(this).unbind("click");
});

演示: http://jsfiddle.net/karim79/MWwyR/4/

Something like this:

$(".spanDefaultName").click(function() {
    var text = $(this).prev("span").text();
    $(this).prev("span").hide();
    $(this).before('<input value="' + text + '" />');
    $(this).unbind("click");
});

Demo: http://jsfiddle.net/karim79/MWwyR/4/

与君绝 2024-10-14 04:22:44

这怎么样? $('span.clickable').click(function () { $(this).prevAll('span').last().html('<输入...>'); } );

How's this? $('span.clickable').click(function () { $(this).prevAll('span').last().html('<input ....>'); });

晨曦慕雪 2024-10-14 04:22:44

我认为这应该满足您的要求

    $('span.spanDefaultName').click(function() {

       val = $(this).prev().text();
       $(this).prev().remove();
       $(this).parent().prepend($('<input type="text" value="' + val + '" />'));

    });

虽然如果您要提交此表单,您的输入将需要一个名称属性

I think this should do what you want

    $('span.spanDefaultName').click(function() {

       val = $(this).prev().text();
       $(this).prev().remove();
       $(this).parent().prepend($('<input type="text" value="' + val + '" />'));

    });

Though if you are going to submit this form your input will need a name attribute

机场等船 2024-10-14 04:22:44

您应该能够通过执行以下操作来得到它:

$('.spanDefaultName').click(function() {
    if($(this).prev().find(':input').length) {
        var text = $(this).prev().val();
        $(this).prev().text(text);
    } else {
        var text = $(this).prev().text();
        $(this).prev().html('<input type="text" value="' + text + '"/>');
    }
});

这将从跨度中获取文本,创建一个文本框,然后将文本插入其中。它将适用于页面上的所有实例。

编辑:根据更新的请求,这将根据所需范围内是否有输入元素进行切换。如果是这样,它将使用文本框的值恢复为文本。

you should be able to get this just how it is by doing:

$('.spanDefaultName').click(function() {
    if($(this).prev().find(':input').length) {
        var text = $(this).prev().val();
        $(this).prev().text(text);
    } else {
        var text = $(this).prev().text();
        $(this).prev().html('<input type="text" value="' + text + '"/>');
    }
});

This will get the text out of the span, create a text box, and insert your text into it. it will work for all instances of this on the page.

Edit: as per the updated request, this will toggle based on if there is an input element in the needed span. If so, it will revert to text using the value of the text box.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文