Мне нравится ответ Онура , но он будет расширяться, чтобы включить опциональный метод toJSON()
для сериализации объектов:
def dumper(obj):
try:
return obj.toJSON()
except:
return obj.__dict__
print json.dumps(some_big_object, default=dumper, indent=2)
То, когда HTML анализируется, что JQuery видит в DOM, является a UPWARDS DOUBLE ARROW
(" ⇑ "), не ссылка на сущность. Таким образом в Вашем коде JavaScript необходимо протестировать на "⇑"
или "\u21d1"
. Кроме того, необходимо изменить то, на что Вы переключаетесь:
function expandCollapse(id) {
var arrow = $("#"+id+" span").html();
if(arrow == "\u21d1") {
$("#"+id+" span").html("\u21d3");
} else {
$("#"+id+" span").html("\u21d1");
}
}
Если Вы делаете предупреждение arrow
что это возвращает? Это возвращает точную строку, против которой Вы соответствуете? Если Вы получаете фактические символы '⇓'
и '⇑'
Вам, вероятно, придется соответствовать ему против "\u21D1"
и "\u21D3"
.
Кроме того, можно хотеть попробовать ⇑
и ⇓
с тех пор не все браузеры поддерживают те объекты.
Обновление: вот полностью рабочий пример: http://jsbin.com/edogop/3/edit#html,live
window.expandCollapse = function (id) {
var $arrowSpan = $("#" + id + " span"),
arrowCharCode = $arrowSpan.text().charCodeAt(0);
// 8659 is the unicode value of the html entity
if (arrowCharCode === 8659) {
$arrowSpan.html("⇑");
} else {
$arrowSpan.html("⇓");
}
// one liner:
//$("#" + id + " span").html( ($("#" + id + " span").text().charCodeAt(0) === 8659) ? "⇑" : "⇓" );
};
Используйте класс для передачи сигналов о текущем состоянии промежутка. HTML мог быть похожим на это
<h3 id="headerId"><span class="upArrow">⇑</span>Header title</h3>
Затем в JavaScript Вы делаете
$( '.upArrow, .downArrow' ).click( function( span ) {
if ( span.hasClass( 'upArrow' ) )
span.text( "⇓" );
else
span.text( "⇑" );
span.toggleClass( 'upArrow' );
span.toggleClass( 'downArrow' );
} );
Это не может быть лучшим способом, но он должен работать. Не протестировал его жесткий
Возможно, Вы не получаете точное совпадение, потому что браузер печатает строчными литерами объект или что-то. Попытайтесь использовать карат (^) и нижний регистр "v" только для тестирования.
Отредактированный - Моя первая теория была проста неправильный.
Проверьте .toggle () эффект.
Вот что-то подобное, с которым я играл ранее.
HTML:
<div id="inplace">
<div id="myStatic">Hello World!</div>
<div id="myEdit" style="display: none">
<input id="myNewTxt" type="text" />
<input id="myOk" type="button" value="OK" />
<input id="myX" type="button" value="X" />
</div></div>
СЦЕНАРИЙ:
$("#myStatic").bind("click", function(){
$("#myNewTxt").val($("#myStatic").text());
$("#myStatic,#myEdit").toggle();
});
$("#myOk").click(function(){
$("#myStatic").text($("#myNewTxt").val());
$("#myStatic,#myEdit").toggle();
});
$("#myX").click(function(){
$("#myStatic,#myEdit").toggle();
});