2013-05-29 3 views
3

У меня есть это:Изменение элементов в SVG с помощью JQuery

<button type="button" id="btn" value="Release">Click Here!</button>  
... 

<body> 
<object data="books.svg" type="image/svg+xml" id="svg" width="1300" height="700"></object> 
</body> 

<script> 
var a = document.getElementById("svg"); 
var svgDoc 

a.addEventListener("load", function() { 
    svgDoc = a.contentDocument; 
}, false); 

$(window).load(function() { 
    console.log($(svgDoc).find("#book1").attr("fill")) 
}); 

$(document).ready(function() { 
    $("#btn").click(function() { 
     console.log("You are here") 
     $(svgDoc).find("#book1").attr("fill","#000000") 
    }) 
}) 

$(window).load(function() { работы, но

$(document).ready(function() { 
     $("#btn").click(function() { 

... не делает. Почему это?

Edit: Добавлено больше кода

Edit # 2: Понял работать. Далее следуют предложения Роберта Лонгсон и изменил это:

$(document).ready(function() {....}) 

к этому:

a.addEventListener("load", function() {...}, false); 

JQuery:

$("#btn").on('click', function() {...} 
+1

Что происходит, когда вы делаете 'console.log ($ (svgDoc) .find (" # book1 "). Attr (" fill "))' после установки атрибута 'fill'? – karthikr

+0

Ничего не происходит – John

+0

Вы получаете сообщение об ошибке? –

ответ

2
$(document).ready(); 

будет срабатывать, как только веб-браузер запускается после того, как синтаксический анализатор сделанный с DOM для этой страницы, но прежде чем все внедренные объекты будут инициализированы. Это полезно, если вы хотите выполнить JavaScript как можно скорее, но это не то, что вы хотите в своем случае. Я предполагаю, что он реализован вне события DOMContentLoaded, который соответствует ready() description

Для того, чтобы управлять им, вам необходимо, чтобы UA загрузил содержимое <object>. Вы можете подключиться к событию onload <object> или как вы это делаете на странице onload.

+0

Мне нужно постоянно использовать эту функцию, а не только при загрузке. – John

+0

Я не уверен, что понимаю, вы может получить доступ и изменить содержимое '' в любой момент после того, как произошло событие загрузки. –

+0

Почему «$ (document) .ready (function() {$ (« # btn »). click (function() {.. «Не работает?» Я нажимаю кнопку, когда вижу, что отображается файл svg. – John

Смежные вопросы