.on('click',。text?

时间:2012-12-11 13:19:16

标签: jquery click

在这个论坛的帮助下,伟大的家伙(Jai,再次感谢),我们提出了以下代码:

var $someparam = 'is';
$('span').text($someparam);
$(document).on('click', 'span', function() {
    $(".somediv").not(":contains('" + $someparam + "')").addClass("hidden");
});

这是游乐场:http://jsfiddle.net/DwAAQ/

代码基本上做的是获取变量(=“is”),用该变量中的文本替换span内容,并在单击此文本时执行隐藏不包含变量中文本的div。 对我来说,它有两个主要问题:我可以向页面插入跨度,可以编辑css,代码最终会替换页面上的所有跨度。

问题是:是否可以修改此代码,以便在上面的示例中写入文本(= $ someparam变量或“是”)并使其可单击以执行jquery?即一切都包含在这段代码中?

2 个答案:

答案 0 :(得分:1)

你必须追加跨度(例如对身体说),然后它应该起作用,因为它将是那里的“最后一个”。

示例:

var $someparam = 'is';
$('body').append('<span>spanner</span>');
$('span :last').text($someparam);
$(document).on('click', 'span :last', function() {
    $(".somediv").not(":contains('" + $someparam + "')").addClass("hidden");
});

编辑:请注意,这具有相同的净效果:

var $someparam = 'is';
$('body').append('<span>' + $someparam + '</span>');
$(document).on('click', 'span :last', function() {
    $(".somediv").not(":contains('" + $someparam + "')").addClass("hidden");
});

这是最有效的:使用id

var $someparam = 'is';
$('body').append('<span id="myspan">' + $someparam + '</span>');
$('#myspan').on('click', function() {
    $(".somediv").not(":contains('" + $someparam + "')").addClass("hidden");
});

并使用参数作为id:

的一部分
var $someparam = 'is';
$('body').append('<span id="myspan' + $someparam + '">' + $someparam + '</span>');
$('#myspan'+ $someparam ).on('click', function() {
    $(".somediv").not(":contains('" + $someparam + "')").addClass("hidden");
});

EDIT2:添加示例页面,其中包含每个示例页面。这有点做作,但显示上述每一个加上一个动态范围,通过按钮添加任意次数,也是可点击的。 (单击1-4,然后单击新跨度以查看效果)...

不,id不能包含逗号,只允许设置中的“字母”(请参阅​​html规范)和数字,并且必须以非数字开头 http://jsfiddle.net/Cecfu/1/

答案 1 :(得分:0)

如果我理解正确,您希望在某个范围内(不是在所有范围内)放置某个文本,然后单击其中一个跨度,以隐藏所有不包含该文本的div.somediv元素那个div?

试试这个

$('span#myspan').text('is');
$('span#myotherspan').text('what');
$(document).on('click', 'span', function() {
    var theText = $(this).text();
    $('.somediv').not(':contains("' + theText + '")').addClass('hidden');
});